In Mockito- Dokumentation und Javadocs heißt es
Es wird empfohlen, ArgumentCaptor zur Überprüfung, jedoch nicht zum Stubbing zu verwenden.
Ich verstehe jedoch nicht, wie ArgumentCaptor zum Stubben verwendet werden kann. Kann jemand die obige Aussage erklären und zeigen, wie ArgumentCaptor zum Stubben verwendet werden kann, oder einen Link bereitstellen, der zeigt, wie dies getan werden kann?
java
unit-testing
junit
mockito
Kann nicht sagen
quelle
quelle
Antworten:
Angenommen, die folgende Testmethode:
In der Mockito-Dokumentation heißt es, dass Sie Captor nicht folgendermaßen verwenden sollten:
Weil Sie Matcher nur während des Stubbens verwenden können:
Die Überprüfung ist jedoch eine andere Geschichte. Wenn Ihr Test sicherstellen muss, dass diese Methode mit einem bestimmten Argument aufgerufen wurde, verwenden Sie
ArgumentCaptor
und dies ist der Fall, für den sie entwickelt wurde:quelle
false
nichttrue
.Die Linie
würde das gleiche tun wie
Die Verwendung von argumentCaptor.capture () beim Stubbing hat also keinen Mehrwert. Die Verwendung von Matchers.any () zeigt besser, was wirklich passiert, und ist daher besser lesbar. Mit argumentCaptor.capture () können Sie nicht lesen, welche Argumente wirklich übereinstimmen. Und anstatt any () zu verwenden, können Sie spezifischere Matcher verwenden, wenn Sie mehr Informationen haben (Klasse des erwarteten Arguments), um Ihren Test zu verbessern.
Und noch ein Problem: Wenn Sie beim Stubben argumentCaptor.capture () verwenden, wird unklar, wie viele Werte nach der Überprüfung voraussichtlich erfasst werden. Wir möchten einen Wert während der Überprüfung erfassen, nicht während des Stubbens, da zu diesem Zeitpunkt noch kein Wert erfasst werden muss. Was erfassen die Argumenterfassungsmethoden während des Stubbens? oder erfasst es nichts? Ich habe keine Antwort auf diese Frage. Ich betrachte es als undefiniertes Verhalten und möchte kein undefiniertes Verhalten verwenden.
quelle
Wenn Sie bei der Suche auf diese Frage gestoßen sind, möchten Sie wahrscheinlich Folgendes:
Warum? Denn wie ich schätzen Sie die Zeit und werden sie nicht
.equals
nur für das einzelne Testszenario implementieren .Und 99% der Tests fallen auseinander, wenn von Mock null zurückgegeben wird, und in einem vernünftigen Design würden Sie die Rückgabe
null
um jeden Preis vermeiden , verwendenOptional
oder nach Kotlin umziehen. Dies bedeutet, dassverify
dies nicht so oft verwendet werden muss und ArgumentCaptors einfach zu mühsam zum Schreiben sind.quelle