Ho un metodo privato nella mia classe di test che costruisce un oggetto Bar
comunemente usato. Il costruttore Bar
chiama il metodo someMethod()
nel mio oggetto mocked:
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 voglio controllare someMethod
è stato anche invocato da quel particolare test. Qualcosa come il seguente:
@Test
public void someTest() {
Bar bar = getBar();
// do some things
verify(mockedObject).someMethod(); // <--- will fail
}
Questo fallisce, perché l'oggetto deriso aveva someMethod
invocato due volte. Non voglio che i miei metodi di test si preoccupino degli effetti collaterali del mio metodo getBar()
, quindi sarebbe ragionevole reimpostare il mio oggetto fittizio 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 la reimpostazione degli oggetti fittizi è generalmente indicativa di prove sbagliate. Tuttavia, questo mi sembra OK.
Alternativa
La scelta alternativa sembra essere la seguente:
verify(mockedObject, times(2)).someMethod();
che a mio parere obbliga ogni test a conoscere le aspettative di getBar()
, per nessun guadagno.