Heim > Java > javaLernprogramm > Hauptteil

Wie verspotte ich private Methoden zum Testen mit PowerMock und Mockito?

Patricia Arquette
Freigeben: 2024-11-04 04:21:29
Original
1045 Leute haben es durchsucht

How to Mock Private Methods for Testing with PowerMock and Mockito?

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

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

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!

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