Ich versuche zu überprüfen, ob eine (void) -Methode innerhalb eines DAO aufgerufen wird. Ich verwende einen Festschreibungspunkt, der eine Ergebnisliste bis zu diesem Punkt sendet, die Liste zurücksetzt und fortfährt. Angenommen, ich habe 4 Dinge in der Liste und einen Festschreibungspunkt von 1. Ich würde erwarten, dass die "send" -Methode viermal aufgerufen wird. Ich kann durch Schreiben überprüfen, ob die Methode einmal aufgerufen wird
Mockito.verify(mock).send()
es geht vorbei .. aber ich möchte überprüfen, wie oft es aufgerufen wurde. Ich würde das denken
Mockito.verify(mock.send(), times(4))
wäre ausreichend, aber es heißt, die Parameter sind nicht korrekt für die Überprüfung.
Übrigens , wenn ich ändern Mockito.verify(mock).send()
zu Mockito.verify(mock.send())
oder Mockito.verify((mock).send())
ich den gleichen Fehler. Gedanken dazu?
Mockito.verify(mock, times(4)).send()
. Ich frage mich, warum Sie densend()
Methodenaufruf innerhalb derverify
Methode "verschoben" haben . Sie hatten bereits die richtige Syntax.verify(mock, atLeastOnce()).send();
Mockito.verify(mock).send()
Bestehen, aber nur das Einkapseln einen Fehler verursachte, der nichts ändert. Es ist jedoch ein Gewinn!Antworten:
Die notwendige Methode ist Mockito # verify :
mock
Objekt ist Ihr verspottet undmode
ist die ,VerificationMode
die beschreibt , wie die Mock überprüft werden sollte. Mögliche Modi sind :Sie benötigen diese statischen Importe aus der
Mockito
Klasse, um dieverify
Methode und diese Überprüfungsmodi verwenden zu können:In Ihrem Fall lautet die korrekte Syntax also:
Dies bestätigt , dass das Verfahren
send
aufgerufen wurde 4 mal am verspott Objekt. Es schlägt fehl, wenn es weniger oder mehr als viermal aufgerufen wurde.Wenn Sie nur überprüfen möchten, ob die Methode einmal aufgerufen wurde, müssen Sie a nicht übergeben
VerificationMode
. Eine einfachewäre genug. Es wird intern verwendet
verify(mock, times(1)).someMethod("was called once");
.Es ist möglich, mehrere Überprüfungsaufrufe auf demselben Mock durchzuführen, um eine "Zwischen" -Verifizierung zu erreichen. Mockito unterstützt so etwas nicht
verify(mock, between(4,6)).someMethod("was called between 4 and 6 times");
, aber wir können schreibenstattdessen, um das gleiche Verhalten zu erhalten. Die Grenzen sind enthalten , sodass der Testfall grün ist, wenn die Methode 4, 5 oder 6 Mal aufgerufen wurde.
quelle
VerificationMode
Methoden befinden (für statischen Import oder explizite Referenz), befinden sie sich inorg.mockito.internal.verification.VerificationModeFactory
.verify(mock, atLeast(0)).someMethod("was called any number of times");
war hilfreich, um eine Anrufüberprüfung zu ignorierenverify(between(m,n))
Gibt es so etwas, das die Anzahl der Anrufe zwischen m und n überprüft?verify
mal mit anrufenatLeast(M)
undatMost(n)
das gleiche Verhalten bekommen. Ich habe die Antwort bearbeitet und das erklärt.VerificationModeFactory
. Es ist immer noch in der neuesten Version verfügbar, aber ich stimme zu, dass interne Klassen nicht verwendet werden sollten.