Ich möchte Mockito verwenden, um den (vereinfachten) Code unten zu testen. Ich weiß nicht, wie ich Mockito sagen soll, dass er beim ersten Mal scheitern und beim zweiten Mal erfolgreich sein soll.
for(int i = 1; i < 3; i++) {
String ret = myMock.doTheCall();
if("Success".equals(ret)) {
log.write("success");
} else if ( i < 3 ) {
log.write("failed, but I'll try again. attempt: " + i);
} else {
throw new FailedThreeTimesException();
}
}
Ich kann den Erfolgstest einrichten mit:
Mockito.when(myMock).doTheCall().thenReturn("Success");
Und der Fehlertest mit:
Mockito.when(myMock).doTheCall().thenReturn("you failed");
Aber wie kann ich testen, ob es erfolgreich ist, wenn es einmal (oder zweimal) fehlschlägt?
doThrow(new RuntimeException()).doNothing().when(myMock).doTheCall();
Der kürzeste Weg zu schreiben, was Sie wollen, ist
Wenn Sie mehrere Argumente angeben, um
thenReturn
dies zu mögen, wird jedes Argument höchstens einmal verwendet, mit Ausnahme des allerletzten Arguments, das so oft wie nötig verwendet wird. Wenn Sie in diesem Fall beispielsweise viermal telefonieren, erhalten Sie "Erfolg", "Sie haben versagt", "Sie haben versagt", "Sie haben versagt".quelle
Da der diesbezügliche Kommentar schwer zu lesen ist, füge ich eine formatierte Antwort hinzu.
Wenn Sie dies mit einer
void
Funktion versuchen, die nur eine Ausnahme auslöst, gefolgt von einem Schritt ohne Verhalten, würden Sie Folgendes tun:quelle
Um diese und diese Antwort zu ergänzen , können Sie auch eine Schleife verwenden, um die verspotteten Anrufe zu verketten. Dies ist nützlich, wenn Sie dasselbe mehrmals oder in einem bestimmten Muster verspotten müssen.
ZB (wenn auch weit hergeholt):
quelle
Ich habe eine andere Situation, ich wollte eine
void
Funktion für den ersten Aufruf verspotten und sie beim zweiten Aufruf normal ausführen.Das funktioniert bei mir:
quelle