Heim > Java > javaLernprogramm > Mockito: „doReturn()' vs. „when()': Wann sollte ich welches verwenden?

Mockito: „doReturn()' vs. „when()': Wann sollte ich welches verwenden?

Barbara Streisand
Freigeben: 2024-11-28 03:44:10
Original
927 Leute haben es durchsucht

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

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:

  • when()...thenReturn() führt einen echten Methodenaufruf durchbevor der angegebene Wert zurückgegeben wird. Dies bedeutet, dass alle von der echten Methode ausgelösten Ausnahmen weiterhin behandelt werden müssen.
  • doReturn()...when() ruft die Methode überhaupt nicht auf. Stattdessen wird direkt der vordefinierte Wert zurückgegeben. Dadurch wird jeder tatsächliche Methodenaufruf umgangen.

Beispiel zur Veranschaulichung des Unterschieds:

Bedenken Sie den folgenden Code:

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

    public String anotherMethodInClass() {
        throw new NullPointerException();
    }
}
Nach dem Login kopieren

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

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!

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