Ho un metodo privato nella mia classe di test che costruisce un Bar
oggetto comunemente usato . Il Bar
costruttore chiama il someMethod()
metodo nel mio oggetto deriso:
private @Mock Foo mockedObject; // My mocked object
...
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
}
In alcuni dei miei metodi di test che voglio verificare è someMethod
stato anche invocato da quel particolare test. Qualcosa di simile al seguente:
@Test
public void someTest() {
Bar bar = getBar();
// do some things
verify(mockedObject).someMethod(); // <--- will fail
}
Questo non riesce, perché l'oggetto deriso era stato someMethod
invocato due volte. Non voglio che i miei metodi di prova si preoccupino degli effetti collaterali del mio getBar()
metodo, quindi sarebbe ragionevole ripristinare il mio oggetto simulato alla fine di getBar()
?
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
reset(mockedObject); // <-- is this OK?
}
Chiedo, perché la documentazione suggerisce che il ripristino di oggetti simulati è generalmente indicativo di test errati. Tuttavia, questo mi fa sentire bene.
Alternativa
La scelta alternativa sembra essere quella di chiamare:
verify(mockedObject, times(2)).someMethod();
che secondo me obbliga ogni test a conoscere le aspettative di getBar()
, senza alcun guadagno.