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?
Wenn Sie eine feste Anzahl von Anrufen erwarten können, können Sie dies mit einem ArgumentCaptor
tun:
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%Tags und Links java testing asynchronous selenium mockito