Wenn Sie das Rückgabeergebnis von motherFunction
etwas vortäuschen möchten, brauchen Sie sich keine Gedanken über die interne Implementierung der Methode zu machen (was dazu führt, dass functionVoid
aufgerufen wird). Was Sie tun müssen, ist Mockito anzugeben, was zu tun ist, wenn die Methode motherFunction
aufgerufen wird. Dies kann über die Klausel wenn mit erreicht werden Syntax;
Wenn das den Punkt dessen vermisst, was Sie erreichen wollen, dann schauen Sie sich wie man ungültige Methoden in der Dokumentation vortäuscht und bestimmt, ob die Verwendung von doAnswer
hier anwendbar ist, etwas wie;
Wenn Sie functionVoid () so ändern können, dass ein veränderliches Objekt als Parameter akzeptiert wird, dann sollten Sie in der Lage sein zu erreichen, was Sie wollen.
Wenn Sie beispielsweise functionVoid () wie folgt ändern:
%Vor%und rufen Sie es in Ihrer motherFunction wie folgt auf:
%Vor%Wenn Sie nun die obige Antwort von OceanLife ändern, sollten Sie Folgendes tun können:
%Vor%Natürlich, wenn Sie functionVoid () ändern können, können Sie auch einfach einen String anstelle von void zurückgeben.
In meinem Beispiel ist die Variable "test" immer noch leer.
Dies ist kein Mockito Problem.
Sehen Sie sich diese Frage und insbesondere diese Antwort .
Der Kern davon ist, dass Java Wert ist (das wird bei den obigen Links viel besser erklärt). Nichts in Mockito oder Java wird jemals dazu in der Lage sein, test
var etwas anderes als einen leeren String zu machen. Es ist eine leere Zeichenfolge vor dem Methodenaufruf und nach dem Aufruf eine leere Zeichenfolge.
Sie können den Status eines Objekts innerhalb einer Methode ändern (z. B. Hinzufügen von Objekten zu einer Sammlung innerhalb einer Methode) und diese Änderungen beim Beenden der Methode sehen. Sie können jedoch nicht ändern, auf welches Objekt eine Var innerhalb einer Methode verweist, und diese Änderungen erwarten "Stick", sobald Sie die Methode verlassen. Strings sind jedoch effektiv unveränderlich (kein Zustand zu ändern), so dass Sie dies nicht einmal tun können.
Somit können keine Änderungen an test
innerhalb dieses Methodenaufrufs vorgenommen werden.
Wenn Sie die Methode someMethod (String arg) des Objekts Obj überprüfen möchten, dann:
%Vor%Obj muss Mock oder Spy sein. Dies funktioniert, wenn Sie überprüfen möchten, ob das richtige Argument an die void-Methode übergeben wurde.
Wenn Ihre Methode irgendwie ein Argument ändert, sollten Sie Assertion verwenden: someMethod (StringWrapper-Wrapper), der die Zeichenfolge ändert.
%Vor%Ich bin mir nicht sicher, ob das, wonach Sie gesucht haben?