Heim >Java >javaLernprogramm >Mockitos doReturn() vs. when(): Was ist der Unterschied bei der Verwendung von Spionageobjekten?

Mockitos doReturn() vs. when(): Was ist der Unterschied bei der Verwendung von Spionageobjekten?

Barbara Streisand
Barbara StreisandOriginal
2024-12-16 17:28:10552Durchsuche

Mockito's doReturn() vs. when(): What's the Difference When Using Spied Objects?

Den Unterschied zwischen doReturn() und when() von Mockito verstehen

Bei der Entwicklung von Spring MVC-Anwendungen wird Mockito zum Verspotten der Serviceschicht verwendet Objekte ist eine gängige Praxis. Beim Erkunden der Fähigkeiten von Mockito wird deutlich, dass sowohl doReturn(...).when(...) als auch when(...).thenReturn(...) anscheinend dieselbe Funktion ausführen. Dies wirft die Frage auf: Gibt es einen Unterschied zwischen diesen beiden Methoden?

Der Hauptunterschied zwischen doReturn() und when() wird deutlich, wenn Spionageobjekte (annotiert mit @Spy) anstelle von Mocks (annotiert mit @) verwendet werden. Mock).

doReturn() vs. when() mit Spied Objekte

  • doReturn(...).when(...): Ermöglicht Ihnen, den Rückgabewert einer Methode zu ändern, ohne sie tatsächlich aufzurufen.
  • when(...).thenReturn(...): Ruft die eigentliche Methodenausführung auf, bevor das angegebene zurückgegeben wird Wert.

Beispiel

Betrachten Sie den folgenden Code:

public class MyClass {
    protected String methodToBeTested() {
        return anotherMethodInClass();
    }

    protected String anotherMethodInClass() {
        throw new NullPointerException();
    }
}

Testfall:

@Spy
private MyClass myClass;

// Works fine, does not invoke anotherMethodInClass()
doReturn("test").when(myClass).anotherMethodInClass();

// Throws NullPointerException because anotherMethodInClass() is invoked
when(myClass.anotherMethodInClass()).thenReturn("test");

Zusammenfassend lässt sich sagen, dass Sie mit doReturn() bei der Verwendung von Spionageobjekten die Methodenausführung überspringen und die Rückgabe direkt festlegen können value, während when() die eigentliche Methode aufruft, bevor der gewünschte Wert zurückgegeben wird. Dieses Verständnis ist entscheidend, wenn Sie in Mockito mit ausspionierten Objekten arbeiten.

Das obige ist der detaillierte Inhalt vonMockitos doReturn() vs. when(): Was ist der Unterschied bei der Verwendung von Spionageobjekten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn