Private Methoden zum Testen mit PowerMock verspotten
Beim Testen von Klassen mit privaten Methoden ist es oft notwendig, diese Methoden zu verspotten, um die Öffentlichkeit sicherzustellen Die API funktioniert wie erwartet. Dies kann jedoch bei der Verwendung von Frameworks wie Mockito eine Herausforderung sein.
Problem:
Möglicherweise sind beim Versuch, private Methoden mit PowerMock zu verspotten, Probleme aufgetreten, insbesondere wenn Sie Ich möchte den Rückgabewert des privaten manipulieren Methode.
Lösung:
Folgen Sie diesen Schritten, um private Methoden zum Testen mit PowerMock zu simulieren:
Importieren PowerMock-APIs: Fügen Sie die erforderlichen PowerMock-Anmerkungen und APIs in Ihren Test ein Klasse.
<code class="java">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;</code>
Klasse zum Testen vorbereiten: Kommentieren Sie Ihre Testklasse mit @PrepareForTest und geben Sie die Klasse an, die die private Methode enthält, die Sie verspotten möchten.
<code class="java">@PrepareForTest(CodeWithPrivateMethod.class)</code>
Spionageinstanz erstellen: Erstellen Sie mit PowerMockito eine Spionageinstanz der Klasse, die die private Methode enthält.
<code class="java">CodeWithPrivateMethod spy = PowerMockito.spy(new CodeWithPrivateMethod());</code>
Private Methode verspotten: Verwenden Sie die when-Methode von PowerMockito, um die private Methode zu verspotten. Geben Sie die Klasse, den Methodennamen, die Parametertypen und den gewünschten Rückgabewert an.
<code class="java">when(spy, method(CodeWithPrivateMethod.class, "doTheGamble", String.class, int.class)) .withArguments(anyString(), anyInt()) .thenReturn(true);</code>
Öffentliche Methode testen: Rufen Sie die öffentliche Methode auf, die die private Methode aufruft und überprüfen Sie sein Verhalten anhand der simulierten Rückgabe Wert.
<code class="java">spy.meaningfulPublicApi();</code>
Beispiel:
Betrachten Sie die folgende Klasse CodeWithPrivateMethod mit einer privaten Methode doTheGamble:
<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>
Um doTheGamble zu verspotten und immer true zurückzugeben, würden Sie Folgendes schreiben test:
<code class="java">@RunWith(PowerMockRunner.class) @PrepareForTest(CodeWithPrivateMethod.class) public class CodeWithPrivateMethodTest { @Test(expected = RuntimeException.class) public void when_gambling_is_true_then_always_explode() throws Exception { CodeWithPrivateMethod spy = PowerMockito.spy(new CodeWithPrivateMethod()); when(spy, method(CodeWithPrivateMethod.class, "doTheGamble", String.class, int.class)) .withArguments(anyString(), anyInt()) .thenReturn(true); spy.meaningfulPublicApi(); } }</code>
Auf diese Weise können Sie private Methoden zum Testen effektiv verspotten und so sicherstellen, dass Ihre öffentliche API auch dann korrekt funktioniert, wenn die Implementierung privater Methoden unverändert bleibt.
Das obige ist der detaillierte Inhalt vonWie verspotte ich private Methoden zum Testen mit PowerMock?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!