Kann mir bitte jemand ein Beispiel geben, das zeigt, wie die org.mockito.ArgumentCaptor
Klasse verwendet wird und wie sie sich von einfachen Matchern unterscheidet , die mit Mockito versehen sind.
Ich habe die bereitgestellten Mockito-Dokumente gelesen, aber diese veranschaulichen es nicht klar, keiner von ihnen kann es klar erklären.
java
unit-testing
junit
mockito
Ujjwal
quelle
quelle
doSomething(data)
mutiertinnerData
, ist diese Änderung dann vorhandenassertEquals("Some inner data", actual.innerData)
oder wirdinnerData
so erfasst, wie sie ist, bevor siedoSomething
ausgeführt wird?OtherClass
ist ein Mock, und da es jetzt definiert ist, wird derdoSomething()
Wille eigentlich nichts tun, er zeichnet einfach das übergebene Objekt auf. Dies bedeutet, dass es so wie es ist erfasst wird, bevordoSomething
es ausgeführt wird.verify
,times(1)
ist die Standardeinstellung und kann weggelassen werden.verify
Methode aufrufen , werden diese Informationen verwendet, um Übereinstimmungen mit der von Ihnen durchgeführten Überprüfung auszuführen. Für jeden Parameter wird gefragt, ob er mit dem von ihm überprüften Aufruf übereinstimmt. Wenn ArgumentCaptor aktiviert ist, werden einfach die Werte gespeichert, mit denen es aufgerufen wurde. Wenn esverify
endet, enthält es alle relevanten Aufrufe. Es ist ungefähr so, wie es funktioniert. Hoffe es hilftDie zwei Hauptunterschiede sind:
ArgumentCaptor
kann mehr als einmal erfassen .Um letzteres zu veranschaulichen, sagen Sie, Sie haben:
Dann kann der Captor Ihnen Zugriff auf alle 4 Argumente gewähren, für die Sie dann Zusicherungen separat ausführen können.
Dies oder eine beliebige Anzahl von Argumenten in der Tat, da a
VerificationMode
nicht auf eine feste Anzahl von Aufrufen beschränkt ist; In jedem Fall erhalten Sie vom Entführer Zugriff auf alle, wenn Sie dies wünschen.Dies hat auch den Vorteil, dass solche Tests (imho) viel einfacher zu schreiben sind als die Implementierung eigener Tests
ArgumentMatcher
- insbesondere, wenn Sie Mockito mit Assertj kombinieren.Oh, und bitte erwägen Sie die Verwendung von TestNG anstelle von JUnit.
quelle
Die Schritte, um eine vollständige Überprüfung durchzuführen, sind:
Bereiten Sie den Captor vor:
Überprüfen Sie, ob der Aufruf abhängig von der Komponente (Mitarbeiter des zu prüfenden Subjekts) mal (1) ist. Dies ist der Standardwert. Sie müssen ihn also hinzufügen.
Lassen Sie das Argument an den Mitarbeiter übergeben
someArgument kann für Zusicherungen verwendet werden
quelle
Hier gebe ich Ihnen ein geeignetes Beispiel für eine Rückrufmethode. Nehmen wir also an, wir haben eine Methode wie method login ():
Ich habe auch die gesamte Hilfsklasse hier eingefügt, um das Beispiel klarer zu machen: loginService-Klasse
und wir haben Listener LoginListener als:
}}
Jetzt wollte ich nur die Methode login () der Klasse Login testen
Vergessen Sie auch nicht, Anmerkungen über der Testklasse als hinzuzufügen
quelle
captor
in deiner Antwort definiert?