Mockito Wie void Methode mit Ausgabeargument?

8

Ich habe eine void-Methode "functionVoid", die einen Parameter informiert.

%Vor%

Wie verspotte ich diese Methode in der JUnit-Methode meine Methode "motherFunction"? In meinem Beispiel ist die Variable "test" immer noch leer.

%Vor%     
guliemo 29.01.2013, 11:56
quelle

4 Antworten

17

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;

%Vor%

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;

%Vor%     
OceanLife 29.01.2013 12:24
quelle
6

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.

    
mrjmh 23.07.2014 03:17
quelle
3
  

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.

    
Tom Tresansky 30.01.2013 20:43
quelle
0

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?

    
Kostek 31.10.2014 09:09
quelle

Tags und Links