Mockito: warte auf einen Aufruf, der mit Argumenten übereinstimmt

12

Ich schreibe einen Selentest und überprüfe das Serververhalten mit Mockito. Insbesondere wenn eine Schaltfläche geklickt wird, möchte ich sicherstellen, dass der Seitencontroller eine bestimmte Methode für eine Abhängigkeit aufruft, die ich verspottet habe.

Da es sich um einen Selentest handelt, muss ich darauf warten, dass der Mock in einem anderen Thread aufgerufen wird, also verwende ich mockito timeout.

%Vor%

Das Problem, das ich habe, ist, dass myMethod viele Male aufgerufen wird. Anstatt auf einen Aufruf zu warten, der mit den erwarteten Argumenten übereinstimmt, wartet timeout nur auf den ersten Aufruf. Wenn ich Thread.sleep (50000) statt Timeout (50000) verwende, funktioniert es wie erwartet ... aber das ist schmutzig, also hoffe ich, es zu vermeiden.

Wie warte ich darauf, dass myMethod mit der erwarteten Eingabe aufgerufen wird?

    
Bryan Hart 08.04.2014, 17:30
quelle

2 Antworten

10

Dies ist keine super saubere Lösung, aber Sie können dies tun ( XX ist der angebliche Rückgabetyp hier):

%Vor%

Um zu testen, ob die Methode aufgerufen wurde, führen Sie Folgendes aus:

%Vor%     
fge 08.04.2014 17:48
quelle
9

Wenn Sie eine feste Anzahl von Anrufen erwarten können, können Sie dies mit einem ArgumentCaptor tun:

%Vor%

Eine andere Möglichkeit besteht darin, alle zu überprüfenden erwarteten Werte anzugeben. Diese müssen jedoch genau in der Reihenfolge angegeben werden, in der sie aufgerufen werden. Der Unterschied zur obigen Lösung besteht darin, dass dies nicht fehlschlägt, selbst wenn der Schein zusätzlich mit einigen nicht verifizierten Argumenten aufgerufen wird. Mit anderen Worten, es ist nicht notwendig, die Anzahl der gesamten Aufrufe zu kennen. Codebeispiel:

%Vor%     
Arvidaa 02.06.2014 21:40
quelle