TDD - e modifica architettura

rated by 0 users
This post has 1 Reply | 2 Followers

Top 10 Partecipanti
Post 71
Punteggio 1.210
bruce Posted: 01-22-2014 9.08

salve sto iniziando a vedere delle cose di TDD

lo scenario è questo 

ho realizzato una classe che deve leggere dei dati da uno strumento 

ho quindi fatto una interfaccia con  tre metodi 

...

open();

read();

close();

...

 

per fare i test ho derivato un fake da questa interfaccia e nel read ho generato dei numeri casuali 

nella classe di produzione invece legge i dati correttamente il tutto funziona bene

ora dovrei testare una situazione vorrei sapere se la connessione è attiva oppure  no

ho pensato  quindi di aggiungere all'interfaccia un metodo getActiveConnection(); 

il problema e che adesso fra la classe FAKE e quella PRODUZIONE si crea del codice duplicato 

ovvero tutta la logica per sapere se la connessione è attiva o no e per gestire lo stato in se.

 

La mia prima idea è stata quella di creare una classe intermedia dove mettere questa logica e poi 

da questa derivare la fake e la produzione 

ma cosi sto legando una classe concreta non più a una interfaccia a ma  a della implementazione ...

 

La seconda idea è stata quella di creare una interfaccia ConnectionStatus con qualche metodo 

di gestione fare una implementazione e utilizzare questa classe sia nella fake che nella produzione 

 

ma come fare a vincolare in entrambe le classi l'utilizzo di questo nuovo oggetto ? 

 

e come fare ad avere un comportamento comune al fine di poterlo testare non in fase di produzione  

ed essere sicuro di mantenere questo comportamento anche in produzione ? 

 

grazie 

spero in una risposta 

  • | Punteggio Post: 20
Top 10 Partecipanti
Maschio
Post 253
Punteggio 3.478

Di base una classe fake non dovrebbe avere mai lo stesso codice di una classe di produzione, appunto perchè, in quanto fake, solitamente implementa una logica specifica per il test.

Senza vedere il codice è difficile capire bene il problema, però in una situazione di questo tipo tu avrai due serie di test.

Come prima cosa io separareri la gestione della connessione in un oggetto ConnectionManager

La prima è quella che verifica effettivamente la connessione fisica, per capire se la connessione è attiva o no etc etc. Ovvero i test sul ConnectionManager.

La seconda sarà invece sulla classe che legge i dati dallo strumento, la quale si appoggierà a ConnectionManager. In questo caso tu creerai un fake di connection manager in modo da verificare il comportamento della tua classe quando il connection manager restituisce errori di connessione etc.

Spero di non essere stato troppo confuso :).

 

Gian Maria.

  • | Punteggio Post: 5
Pagina 1 di 1 (2 elementi) | RSS
Powered by Community Server (Commercial Edition), by Telligent Systems