Heim >Java >javaLernprogramm >Mockito: „doReturn()' vs. „when()': Wann sollten Sie Which bei ausspionierten Objekten verwenden?

Mockito: „doReturn()' vs. „when()': Wann sollten Sie Which bei ausspionierten Objekten verwenden?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-28 18:19:151007Durchsuche

Mockito: `doReturn()` vs. `when()`: When Should You Use Which with Spied Objects?

Mockito: Den subtilen Unterschied zwischen doReturn() und when() verstehen

Bei der Verwendung des Mocking-Frameworks Mockito zur Verbesserung der Testfunktionen stoßen Entwickler häufig auf doReturn() und when()-Methoden. Während beide Methoden dem Stubbing von Methodenaufrufen dienen, besteht ein subtiler Unterschied zwischen ihnen bei der Arbeit mit ausspionierten Objekten (annotiert mit @Spy).

when(...).thenReturn(...) vs doReturn(...).when(...)

when(...).thenReturn(...):

  • Macht eine echter Methodenaufruf, bevor der angegebene Wert zurückgegeben wird.
  • Wenn die aufgerufene Methode eine Ausnahme auslöst, muss diese behandelt oder verspottet werden separat.

doReturn(...).when(...):

  • Vermeidet den eigentlichen Methodenaufruf vollständig.

Praktisches Beispiel

Bedenken Sie Folgendes MyClass:

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

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

Testen mit Spy

doReturn(...).when(...):

@Spy
private MyClass myClass;

// Works as expected
doReturn("test").when(myClass).anotherMethodInClass();

when(...).thenReturn(...):

// Throws a NullPointerException
when(myClass.anotherMethodInClass()).thenReturn("test");

In diesem Szenario doReturn() stellt sicher, dass die Ausnahme in anotherMethodInClass() vermieden wird und dennoch der gewünschte Wert zurückgegeben wird. Im Gegensatz dazu löst when() den eigentlichen Methodenaufruf aus, was dazu führt, dass die NullPointerException geworfen wird.

Daher hängt die Wahl zwischen doReturn() und when() bei der Arbeit mit ausspionierten Objekten davon ab, ob Sie aufrufen möchten die eigentliche Methode oder umgehen Sie sie ganz.

Das obige ist der detaillierte Inhalt vonMockito: „doReturn()' vs. „when()': Wann sollten Sie Which bei ausspionierten Objekten 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