Wie Titel, nur fragen, ob es einen Mechanismus mit Easymock zu testen, wenn eine Methode während seiner Lebensdauer nicht aufgerufen wurde.EasyMock: testen Sie diese Methode in Mock heißt nicht
Antwort
Standardmäßig löst Easymock eine Ausnahme für alle aufgerufenen Methoden aus, für die Sie keine expliziten Erwartungen festgelegt haben.
Vom EasyMock documentation:
Nizza Mocks
Auf einem Mock-Objekt durch Mock() zurückgegeben wird das Standardverhalten für alle Methoden ist eine AssertionError für alle unerwarteten Methodenaufrufen zu werfen. Wenn Sie ein "nettes" Mock-Objekt wünschen, das standardmäßig alle Methodenaufrufe zulässt und entsprechende leere Werte (0, null oder false) zurückgibt, verwenden Sie stattdessen niceMock().
Was Sie also fragen, ist das Standardverhalten.
Ich weiß, dass diese Frage sehr alt ist, aber ich hatte die gleiche Frage wie das OP und habe mich mehr umgesehen. Ich habe die folgende Lösung gefunden:
Durch Hinzufügen von .andThrow(new AssertionFailedError()).anyTimes();
am Ende Ihrer EasyMock-Deklaration wird der Test fehlschlagen, wenn die Mocked-Methode aufgerufen wird.
Der Grund dafür ist, dass NiceMock einfach nicht verwendet wird und der Test aufgrund des Aufrufs der unmounted-Methode fehlschlägt, weil Sie so spezifisch testen können, dass die XYZ-Methode im gegebenen Szenario nicht aufgerufen wurde.
Ich möchte David Wallace Kredit für diese Antwort geben. Ich fand diese Lösung in seiner Antwort auf den folgenden Beitrag: Test that void method didn't get called with EasyMock
Ich glaube, dass dies die akzeptierte Antwort sein sollte. Grund dafür ist, dass Unit-Tests oft mit neuen Anforderungen geändert werden und es sehr leicht ist, zu übersehen, warum eine falsche Erwartung nicht gesetzt wurde. Diese Lösung macht den fehlenden Methodenaufruf explizit und fordert daher mehr Aufmerksamkeit von der Person, die den Code ändert. – mindreader
Ich finde das Standardverhalten nervig, wie Sie sehr leicht am Ende "erfordert" im Test, dass der Code getestet wird, ist ineffizient. Ich habe einmal einen einfachen Refactor gemacht, um einen Aufruf von getSomething() außerhalb einer Schleife zu verschieben, was dazu führte, dass der Test fehlschlug, weil ich getSomething 40 Mal (!) Nicht aufgerufen hatte, und "nicht nette" Mocks diese Art von Test ermutigten würde fehlschlagen, wenn ich vor dem Refactoring nur einen Aufruf erwartet hätte). –
@Stein: einverstanden. Unit-Tests sollten feingranular sein, idealerweise nur eine Sache testen. "nicht nette" Mocks entmutigen dies. –
Aus meiner Lektüre der Frage möchte der OP einen Spott, der die Verifizierung nicht besteht, wenn er aufgerufen wird. Nette Mocks sind nicht das, was das OP will, denn wenn während des Testens ein schöner Mock aufgerufen wird, besteht er noch Verifizierung. –