J'ai une méthode privée dans ma classe de test qui construit un Barobjet couramment utilisé . Le Barconstructeur 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 someMethodque 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é someMethodinvoqué 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.