Heim > Java > javaLernprogramm > Wie verspotte ich private Methoden zum Testen mit PowerMock?

Wie verspotte ich private Methoden zum Testen mit PowerMock?

Linda Hamilton
Freigeben: 2024-11-03 15:06:30
Original
286 Leute haben es durchsucht

How do I Mock Private Methods for Testing Using PowerMock?

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:

  1. 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>
    Nach dem Login kopieren
  2. 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>
    Nach dem Login kopieren
  3. 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>
    Nach dem Login kopieren
  4. 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>
    Nach dem Login kopieren
  5. Ö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>
    Nach dem Login kopieren

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

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

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!

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