Heim >Java >javaLernprogramm >Wie kann man mit Mockito selektiv Methoden in Java 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:
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!