Heim >Java >javaLernprogramm >Wie kann man mit Mockito selektiv Methoden in Java verspotten?

Wie kann man mit Mockito selektiv Methoden in Java verspotten?

Linda Hamilton
Linda HamiltonOriginal
2024-12-07 18:34:13654Durchsuche

How to Selectively Mock Methods in Java with Mockito?

Selektive Methoden in Java mit Mockito verspotten

In Java ermöglicht Mockito Entwicklern, bestimmte Methoden innerhalb einer Klasse zu verspotten, während andere Methoden davon unberührt bleiben. Dieser Vorgang wird als partielles Verspotten bezeichnet.

Betrachten Sie die folgende Stock-Klasse:

public class Stock {

    private final double price;
    private final int quantity;

    public Stock(double price, int quantity) {
        this.price = price;
        this.quantity = quantity;
    }

    public double getPrice() {
        return price;
    }

    public int getQuantity() {
        return quantity;
    }

    public double getValue() {
        return getPrice() * getQuantity();
    }
}

In einem Testszenario möchten wir möglicherweise getPrice() und verspotten getQuantity()-Methoden, um bestimmte Werte zurückzugeben. Wir möchten jedoch, dass die getValue()-Methode die beabsichtigte Berechnung durchführt.

Mithilfe von partiellem Mocking können wir dies wie folgt erreichen:

Stock stock = mock(Stock.class);
when(stock.getPrice()).thenReturn(100.00);
when(stock.getQuantity()).thenReturn(200);
when(stock.getValue()).thenCallRealMethod();

In dieser Konfiguration:

  • when(stock.getPrice()).thenReturn(100.00);: Verspottet die getPrice()-Methode, um 100,00 zurückzugeben.
  • when(stock.getQuantity()).thenReturn(200);: Verspottet die zurückzugebende getQuantity()-Methode 200.
  • when(stock.getValue()).thenCallRealMethod();: Gibt an, dass die getValue()-Methode wie im Originalcode angegeben ausgeführt werden soll.

Alternativ können wir stattdessen die Methode spy() verwenden mock():

Stock stock = spy(Stock.class);
doReturn(100.00).when(stock).getPrice();
doReturn(200).when(stock).getQuantity();

In diesem Fall rufen alle Methoden ohne Stubs (z. B. getValue()) ihre ursprünglichen Implementierungen auf.

Es ist erwähnenswert, dass es sich um Spott handelt Methoden wie getPrice() und getQuantity() liefern möglicherweise nicht das gewünschte Ergebnis, wenn getValue() direkt auf ihren Werten und nicht auf den Scheinrückgabewerten basiert. In solchen Fällen ist es möglicherweise angemessener, auf Spott gänzlich zu verzichten und sich auf die tatsächliche Implementierung im Test zu verlassen, wie unten gezeigt:

Stock stock = new Stock(100.00, 200);
double value = stock.getValue();
assertEquals(100.00 * 200, value, 0.00001);

Das obige ist der detaillierte Inhalt vonWie kann man mit Mockito selektiv Methoden in Java verspotten?. 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