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

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

Patricia Arquette
Patricia ArquetteOriginal
2024-11-04 04:21:291135Durchsuche

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>

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!

Stellungnahme:
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