Heim >Java >javaLernprogramm >Mockito: „doReturn()' vs. „when()' – Wann sollte ich Which zum Mocking verwenden?

Mockito: „doReturn()' vs. „when()' – Wann sollte ich Which zum Mocking verwenden?

Linda Hamilton
Linda HamiltonOriginal
2024-12-09 16:01:16982Durchsuche

Mockito: `doReturn()` vs. `when()` – When Should I Use Which for Mocking?

Mockito – Erkundung des Unterschieds zwischen doReturn() und when() für Mocking

Bei der Nutzung der Leistung von Mockito in einer Spring MVC-Anwendung, Entwickler stoßen oft auf die Ähnlichkeit zwischen doReturn(...).when(...) und when(...).thenReturn(...). Dies wirft die Frage auf, warum diese beiden Methoden angesichts ihrer scheinbaren Äquivalenz existieren.

Während beide Ansätze bei Mocks, die mit @Mock annotiert sind, zum gleichen Ergebnis führen, zeigt sich ein subtiler Unterschied, wenn mit @Spy annotierte Spionageobjekte verwendet werden. Im Gegensatz zu when(...).thenReturn(...), das den eigentlichen Methodenaufruf ausführt, bevor der angegebene Wert zurückgegeben wird, umgeht doReturn(...) den Methodenaufruf vollständig.

Diese Unterscheidung wird entscheidend, wenn Umgang mit ausspionierten Objekten, die über Methoden verfügen, die Ausnahmen auslösen. Betrachten Sie beispielsweise die folgende Klasse mit zwei Methoden:

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

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

In der Testklasse:

@Spy
private MyClass myClass;

// ...

// Executes methodToBeTested() and swallows the NullPointerException
doReturn("test").when(myClass).anotherMethodInClass();

// Throws NullPointerException without executing methodToBeTested()
when(myClass.anotherMethodInClass()).thenReturn("test");

Wie gezeigt, können Sie mit doReturn(...) den Rückgabewert steuern ohne die Methodenausführung auszulösen, während when(...) zuerst die Methode ausführt und erst dann das angegebene Ergebnis liefert. Dieser subtile Unterschied ermöglicht eine bessere Kontrolle über das Verspotten von Objekten und die Ausnahmeverwaltung und macht doReturn(...) zur bevorzugten Wahl beim Umgang mit ausspionierten Objekten, die möglicherweise Ausnahmen auslösen.

Das obige ist der detaillierte Inhalt vonMockito: „doReturn()' vs. „when()' – Wann sollte ich Which zum Mocking verwenden?. 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