Verspotten privater Methoden zum Testen mit PowerMock
Das Testen von Klassen mit privaten Methoden kann eine Herausforderung sein, insbesondere wenn versucht wird, das korrekte Verhalten dieser Methoden anzunehmen . PowerMock bietet hierfür eine Lösung, die für einige Benutzer jedoch möglicherweise nicht wie erwartet funktioniert. Hier untersuchen wir einen möglichen Ansatz mit einer Kombination aus Mockito und PowerMock, um private Methoden erfolgreich zu verspotten.
Ansatz:
Das primäre Tool, das wir verwenden werden, ist Mockitos when-Methode zum Festlegen des Verhaltens der privaten Methode. Um auf die private Methode zuzugreifen, verwenden wir die Spy-Funktion von PowerMock. Dadurch können wir ein Spionageobjekt erstellen, das Aufrufe der privaten Methode abfängt und es uns ermöglicht, ihr Verhalten zu verspotten.
Beispiel:
Betrachten Sie die folgende Klasse, CodeWithPrivateMethod, welches eine private Methode doTheGamble hat.
<code class="java">public class CodeWithPrivateMethod { public void meaningfulPublicApi() { if (doTheGamble("Whatever", 1 << 3)) { throw new RuntimeException("boom"); } } private boolean doTheGamble(String whatever, int binary) { Random random = new Random(System.nanoTime()); boolean gamble = random.nextBoolean(); return gamble; } }</code>
Test:
Mit dem beschriebenen Ansatz können wir einen JUnit-Test schreiben, der die private Methode verspottet und das Gewünschte bestätigt Verhalten.
<code class="java">import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.api.mockito.PowerMockito; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.powermock.api.mockito.PowerMockito.when; import static org.powermock.api.support.membermodification.MemberMatcher.method; @RunWith(PowerMockRunner.class) @PrepareForTest(CodeWithPrivateMethod.class) public class CodeWithPrivateMethodTest { @Test(expected = RuntimeException.class) public void when_gambling_is_true_then_always_explode() { CodeWithPrivateMethod spy = PowerMockito.spy(new CodeWithPrivateMethod()); when(spy, method(CodeWithPrivateMethod.class, "doTheGamble", String.class, int.class)) .withArguments(anyString(), anyInt()) .thenReturn(true); spy.meaningfulPublicApi(); } }</code>
In diesem Test erstellen wir ein Spionageobjekt spy und verspotten die doTheGamble-Methode mithilfe von when. Wir geben an, dass die Methode für jede Eingabe immer „true“ zurückgeben soll. Wenn daher die sinnvollePublicApi-Methode aufgerufen wird, erwartet der Test, dass der Code aufgrund des simulierten Verhaltens der privaten Methode eine RuntimeException auslöst.
Dieser Ansatz kombiniert die Leistungsfähigkeit von Mockito zum Verspotten und PowerMock für den Zugriff auf private Methoden und bietet eine Komplettlösung zum Testen von Code, der auf privaten Methoden basiert.
Das obige ist der detaillierte Inhalt vonWie verspotte ich private Methoden zum Testen mit PowerMock und Mockito?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!