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
Freigeben: 2024-11-28 18:19:15
Original
1062 Leute haben es durchsucht

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();
    }
}
Nach dem Login kopieren

Testen mit Spy

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

@Spy
private MyClass myClass;

// Works as expected
doReturn("test").when(myClass).anotherMethodInClass();
Nach dem Login kopieren

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

// Throws a NullPointerException
when(myClass.anotherMethodInClass()).thenReturn("test");
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage