Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio
Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio
Motorola edge 70 Fusion FIFA World Cup 26 Edition porta la maglia iridata su uno smartphone accessibile: display Extreme AMOLED da 6,78 pollici a 144Hz, fotocamera Sony LYTIA 710 con moto ai, Snapdragon 7s Gen 3 abbinato a 8GB di RAM, batteria da 5200 mAh con ricarica TurboPower a 68W e certificazione IP68/IP69, il tutto in una veste PANTONE Silhouette con logo dorato a 24 carati, moto buds bass incluse in confezione e contenuti software dedicati ai Mondiali 2026
Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati?
Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati?
Dopo più di un anno dal primo test drive ci siamo rimessi al volante della Renault 5 E-Tech Electric, questa volta utilizzandola come prima auto per circa due settimane. Scoprite con noi se il progetto convince ancora
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix
Un proiettore economico, che fa della portabilità e immediatezza i suoi punti di forza. Adatto per una camera da letto o per la casa vacanze, è basato su sistema proprietario Linux ma offre piena compatibilità ufficiale a Netflix
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-01-2007, 13:41   #1
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Mock or not to Mock?

Ho provato a introdurre il TDD dove lavoro in piccoli componenti che dovevo modificare e per semplicità ( ) ho rifatto da zero. Questi componenti vengono usati da delle action di struts(per chi non le conosce delle servlet), e devono accedere a DB.

Si è posto il problema come usare l'accesso a db nei test. Ho deciso di Mockare l'accesso al db, e fin qua + o - tutto chiaro(anche se la soluzione non mi soddisfaceva + di tanto, forse sarebbe piu semplice un db in memory fatto apposta per i test...).

Però è sorto un problema. Dentro il componente creavo la connesione a db, cioè un oggetto(new DBConnect(...) ).

Problema:
Visto che io devo testare il componente, e questo crea l'oggetto che rappresenta la connesione al db, come faccio a dirgli di usare la connesione fake?

Naturalmente si può passare la connesione al componente come parametro(in creazione, o nel metodo che fa il lavoro).
Ma questo vuol dire che per testare un componente in pure isolation, questo non deve creare oggetti(o almeno oggetti che ne possono alterare il funzionamento, e che si prestano a essere mockati).

Questo crea problemi ad esempio, quando io voglio testare la action che usa il mio componente. La action ha la particolarità di essere chiamata dall'application server, percui non posso alterarne i parametri di creazione(a meno di fare cambiamenti strutturali che coinvolgerebbero tutte le action dell'applicazione)
In questo caso le soluzioni sarebbero 2:
La action usa il mio componente in una certa maniera, io mocko il mio componente e verifico che vengano effetuate le giuste chiamate con i giusti parametri. Questo non si può fare perchè il componente viene creato all'interno della action.

Oppure:
Mocko il db, e lo passo al mio componente. Non posso perchè la connesione al db o la crea il mio componente(che non posso mockare), oppure la passa la action al mio componente.Ma sto testando la action, e come faccio a dirgli di passare il db mockato invece di quello reale?


Il mock è percio molto utile quando qualcosa di complesso (il db, l'accesso ai file, alla rete, etc) viene passato a un componente, ma viene meno utile quando questo viene usato.

Certo nel mio esempio, si sarebbe potuto ristrutturare il meccansimo delle action, in modo da fare una action personalizzata a cui passare la connesione al db. Però nel mio caso era impossibile stando io testando solo una piccola parte dell'applicazione.

Tutto questo discorso per chiedervi o sentire opinioni sui mock, o meglio, su questa presunta (da me) limitiazione dei mock.





ps. Nel applicazione reale in un punto ho risolto il problema grazie al fatto che si usavano dei singletone. C'era un associazione stringa-> Classe per la connesione. Ho sostiutito la classe base, con quella mockata e ho risolto. Però in un altro punto non ci sono riuscito :|

pps so che il post è contorto, spero che qualcuno lo capisca
thebol è offline   Rispondi citando il messaggio o parte di esso
Old 07-01-2007, 14:04   #2
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
hai scordato un "To" nel titolo
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 07-01-2007, 14:30   #3
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Poichè ogni classe Java è caricata dinamicamente, potresti lasciare il codice inalterato e rimpiazzare la classe DBConnection "vera" con il suo mock attraverso il classpath.

Per sintetizzare in "jarrese", useresti i mock con:

java -cp .;Mocks.jar -jar Applicazione.jar

e i "real" con:

java -cp .;Reals.jar -jar Applicazione.jar

Mocks e Components conterrebbero due diversi DBConnection, uno mock e l'altro real, binariamente compatibili. Applicazione.jar sarebbe il pacchetto di tutto ciò che non è DBConnection ma eventualmente usi questa classe.

All'atto pratico il tutto è "facilmente" controllabile con i task di ant.

Non sono tuttavia sicuro che questo sia rigoroso dal punto di vista del TDD perchè usi una caratteristica che è propria di alcune specie di linguaggi, Java Smalltalk, Python, Ruby eccetera, ma non di altri, C++, C eccetera, limitazione che il TDD certamente non impone.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me!
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 07-01-2007, 22:12   #4
thebol
Senior Member
 
Iscritto dal: Dec 2000
Città: bologna
Messaggi: 1309
Quote:
Originariamente inviato da 71104
hai scordato un "To" nel titolo
cazz ero convinto che nel primo non ci andasse ma gugol ti da ragione
thebol è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Motorola edge 70 Fusion FIFA World Cup 26 Edition: un ottimo smartphone per i fan del calcio Motorola edge 70 Fusion FIFA World Cup 26 Editio...
Renault 5 elettrica al giudizio definitivo: solo stupore iniziale o premi meritati? Renault 5 elettrica al giudizio definitivo: solo...
HONOR CHOICE Projector Air Pro: piccolo, portatile e con Netflix HONOR CHOICE Projector Air Pro: piccolo, portati...
ASUS ProArt GoPro Edition è il notebook compatto per chi crea ASUS ProArt GoPro Edition è il notebook c...
Fable e Sol a confronto: due cartoni animati creati su un PC con RTX 3090 Fable e Sol a confronto: due cartoni animati cre...
Cercate un hard disk esterno? Su Amazon ...
La GPU più piccola al mondo &egra...
DoomPaint: sì, adesso si pu&ograv...
BIOS bloccato, Claude Code trova il punt...
Università di Modena e Reggio Emi...
Giulia Caffi, prima laureata in Health I...
NVIDIA GeForce Titan X compie 10 anni: q...
Un deposito anti-speculazione per i nuov...
Anche il cerotto diventa smart: accelera...
Mezzo milione di galassie in una sola im...
Lefant V1 a 99 euro: 40.000 Pa, LED touc...
Adesso il cibo si ordina a voce: Just Ea...
I brani creati dall'IA fuori dalle class...
Il gioco che tutti aspettano nel 2026 no...
Kindle Scribe 32 GB in offerta: schermo ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 06:38.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v