Ich habe eine private Methode in meiner Testklasse, die ein häufig verwendetes Bar
Objekt erstellt. Der Bar
Konstruktor ruft die someMethod()
Methode in meinem verspotteten Objekt auf:
private @Mock Foo mockedObject; // My mocked object
...
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
}
In einigen meiner Testmethoden, die ich überprüfen möchte, someMethod
wurde auch von diesem bestimmten Test aufgerufen. So etwas wie das folgende:
@Test
public void someTest() {
Bar bar = getBar();
// do some things
verify(mockedObject).someMethod(); // <--- will fail
}
Dies schlägt fehl, da das verspottete Objekt someMethod
zweimal aufgerufen wurde. Ich möchte nicht, dass sich meine Testmethoden um die Nebenwirkungen meiner getBar()
Methode kümmern. Wäre es also sinnvoll, mein Scheinobjekt am Ende von zurückzusetzen getBar()
?
private Bar getBar() {
Bar result = new Bar(mockedObject); // this calls mockedObject.someMethod()
reset(mockedObject); // <-- is this OK?
}
Ich frage, weil die Dokumentation vorschlägt , dass das Zurücksetzen von Scheinobjekten im Allgemeinen auf schlechte Tests hindeutet. Dies fühlt sich für mich jedoch in Ordnung an.
Alternative
Die alternative Wahl scheint zu sein:
verify(mockedObject, times(2)).someMethod();
was meiner meinung nach jeden test zwingt, über die erwartungen von zu wissen getBar()
, ohne gewinn.