Mockito: Den Unterschied zwischen doReturn() und when() verstehen
Es ist verständlich, dass es zu Verwirrung zwischen Mockitos doReturn() kommt... when() und when()...thenReturn() Methoden, da sie den Anschein erwecken, dass sie dasselbe tun. Während beide Methodenaufrufe verspotten und vordefinierte Werte zurückgeben können, gibt es einen subtilen Unterschied, der relevant wird, wenn spionierte Objekte (annotiert mit @Spy) anstelle von Mocks (annotiert mit @Mock) verwendet werden.
Der Schlüssel Unterschied: Methodenaufrufverhalten
Der entscheidende Unterschied liegt darin, wie sich diese Methoden bei der Interaktion mit Spionageverhalten verhalten Objekte:
Beispiel zur Veranschaulichung des Unterschieds:
Bedenken Sie den folgenden Code:
public class MyClass { public String methodToBeTested() { return anotherMethodInClass(); } public String anotherMethodInClass() { throw new NullPointerException(); } }
Test mit Spionageobjekt:
@Spy private MyClass myClass; // ... // This approach will work without throwing an exception doReturn("test").when(myClass).anotherMethodInClass(); // This approach will throw a NullPointerException when(myClass.anotherMethodInClass()).thenReturn("test");
Mit einem Spionageobjekt Objekt, when()...thenReturn() versucht, anotherMethodInClass() aufzurufen, was eine NullPointerException auslöst. Im Gegensatz dazu vermeidet doReturn()...when() den Aufruf der Methode und gibt „test“ direkt zurück, wodurch die Ausnahme unterdrückt wird.
Fazit
Der Unterschied zwischen diesen Bei der Verwendung von Spionageobjekten werden zwei Methoden deutlich. Bei ausspionierten Objekten bietet doReturn()...when() eine bessere Kontrolle, indem es tatsächliche Methodenaufrufe umgeht und vordefinierte Werte direkt zurückgibt. Im Gegensatz dazu ruft when()...thenReturn() die echten Methoden auf, was zu Ausnahmen oder anderem unbeabsichtigtem Verhalten führen kann. Daher hängt die Wahl der geeigneten Methode vom gewünschten Verhalten ab und davon, ob Sie ein Scheinobjekt oder ein Spionageobjekt verwenden.
Das obige ist der detaillierte Inhalt vonMockito: „doReturn()' vs. „when()': Wann sollte ich welches verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!