J'ai une méthode privée dans ma classe de test qui construit un Bar
objet couramment utilisé . Le Bar
constructeur appelle la someMethod()
méthode dans mon objet simulé:
private @Mock Foo mockedObject; // My mocked object
...
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
}
Dans certaines de mes méthodes de test, je souhaite vérifier someMethod
que ce test particulier a également été invoqué. Quelque chose comme ce qui suit:
@Test
public void someTest() {
Bar bar = getBar();
// do some things
verify(mockedObject).someMethod(); // <--- will fail
}
Cela échoue car l'objet simulé a été someMethod
invoqué deux fois. Je ne veux pas que mes méthodes de test se soucient des effets secondaires de ma getBar()
méthode, donc serait-il raisonnable de réinitialiser mon objet fictif à la fin de getBar()
?
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
reset(mockedObject); // <-- is this OK?
}
Je demande, parce que la documentation suggère que réinitialiser des objets fictifs est généralement révélateur de mauvais tests. Cependant, cela me convient.
Alternative
Le choix alternatif semble appeler:
verify(mockedObject, times(2)).someMethod();
ce qui à mon avis oblige chaque test à connaître les attentes de getBar()
, sans aucun gain.