Kann Mockito überprüfen Sie die Parameter basierend auf Ihre Werte zum Zeitpunkt des Methodenaufrufs?
Ich habe eine Foo
- Klasse, die SUT und eine Bar
Klasse, die seiner Mitarbeiter. Foo
Anrufe run(List<Object> values)
auf die Bar
mit "expectedList
" als argument. Dann Foo
wird noch ein paar weitere Elemente zu dieser List
damit seinen Status unterscheidet sich von dem, was es war zur Zeit der Berufung run()
. Hier ist meine test-Fall.
@Test
public void testFoo() {
Bar collaborator = spy(new Bar());
Foo sut = new Foo(collaborator);
verify(collaborator).run(expectedList);
}
Beachten Sie, dass der Mitarbeiter tatsächlich ein spy-Objekt, anstatt ein mock. Dieser Testfall fehl, denn obwohl run()
genannt wurde, mit einem argument gleich expectedList
es wurde verändert und der aktuelle Wert nicht mehr entspricht expectedList
. Dies ist jedoch der Weg, wie es funktionieren soll, so Frage ich mich, ob es gibt einen Weg, um Mockito speichern der snapshot-Parameter, wenn eine Methode aufgerufen wird, und überprüfen Sie Sie anhand dieser Werte eher als die aktuellen Werte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie ein
Answer
überprüfen Sie den Wert des Arguments, wenn die Methode aufgerufen wird. Sie können entweder werfen einAssertionError
innerhalb derAnswer
wenn der Wert falsch ist, oder können Sie den Wert speichern, und tun Sie Ihre Behauptung am Ende.Answer
ich einenArgurmentCaptor
und schreiben Sie einer oder mehreren Aussagen über den Endzustand der Liste, d.h. mit FEST-AssertassertThat(captor.getValue()).contains("A", "B").contains("T", "U");
Die Antwort von Dawud ibn Kareem für mich gearbeitet, aber mir fehlte ein Beispiel, auch ich Kotlin und Mockito-Kotlin, also meine Lösung ist wie folgt:
valueAtInvocation
repräsentieren den Wert der veränderlichen Eigenschaftfoo.mutable
bei dem letzten Aufrufbar.run(foo)
. Sollte auch möglich sein, das zu tun, Behauptungen innerhalb derthen {}
block.Können Sie nicht nennen
verify()
auf ein Objekt, das nicht einmock
. Ist es das, was du meintest?Warum versuchen Sie nicht, mit argument erfassen, zu erwerben, den Wert der erwarteten Liste, wenn es ausgeführt wurde, und dann können Sie es vergleichen.
expectedList
Instanz, nicht eine Kopie, so ist dies im wesentlichen der gleiche wie er tut, ist es nicht?