Sono un principiante dello sviluppo e in particolare dei test unitari. Suppongo che il mio requisito sia piuttosto semplice, ma sono desideroso di conoscere altri pensieri su questo.Mocking delle variabili membro di una classe usando Mockito
Supponiamo che io ho due classi in questo modo -
public class First {
Second second ;
public First(){
second = new Second();
}
public String doSecond(){
return second.doSecond();
}
}
class Second {
public String doSecond(){
return "Do Something";
}
}
Diciamo che io sto scrivendo unit test per testare First.doSecond()
metodo. Tuttavia, supponiamo, voglio prendere in giro la classe Second.doSecond()
in questo modo. Sto usando Mockito per farlo.
public void testFirst(){
Second sec = mock(Second.class);
when(sec.doSecond()).thenReturn("Stubbed Second");
First first = new First();
assertEquals("Stubbed Second", first.doSecond());
}
sto vedendo che il beffardo non ha effetto e l'asserzione fallisce. Non c'è modo di prendere in giro le variabili membro di una classe che voglio testare. ?
Grazie. Lo vedo. Mi sto solo chiedendo come posso eseguire test di integrazione usando mock dove ci possono essere molti metodi interni, classi che potrebbero aver bisogno di essere deriso, ma non necessariamente disponibili per essere impostate attraverso un setXXX() in anticipo. –
Utilizzare un framework di iniezione delle dipendenze, con una configurazione di test. Disegna un diagramma di sequenza del test di integrazione che stai cercando di fare. Calcola il diagramma di sequenza negli oggetti che puoi effettivamente controllare. Ciò significa che se stai lavorando con una classe framework che ha l'anti-pattern dell'oggetto dipendente che mostri sopra, allora dovresti considerare l'oggetto e il suo membro malamente fattorizzato come una singola unità in termini del diagramma di sequenza. Preparati a modificare il factoring di qualsiasi codice che controlli, per renderlo più testabile. – kittylyst
Caro @kittylyst, sì probabilmente è sbagliato dal punto di vista TDD o da qualsiasi tipo di punto di vista razionale. Ma a volte uno sviluppatore lavora in posti dove nulla ha senso e l'unico obiettivo che si ha è solo quello di completare le storie che hai assegnato e andare via. Sì, è sbagliato, non ha senso, le persone non qualificate prendono le decisioni chiave e tutte queste cose. Quindi, alla fine della giornata, gli anti-pattern vincono molto. – amanas