Heim  >  Artikel  >  Java  >  Wie verspotte ich private Methoden in Java mit PowerMock?

Wie verspotte ich private Methoden in Java mit PowerMock?

Susan Sarandon
Susan SarandonOriginal
2024-11-04 08:14:01462Durchsuche

How to Mock Private Methods in Java with PowerMock?

Private Methoden mit PowerMock testen

Während der Softwareentwicklung kommt es zwangsläufig zu Situationen, in denen Sie öffentliche Methoden testen müssen, die auf privaten Methoden basieren diejenigen. In solchen Fällen kann die Annahme der korrekten Funktionalität privater Methoden den Testprozess vereinfachen. PowerMock ist ein Java-Testframework, das Mechanismen zum Verspotten privater Methoden zu Testzwecken bereitstellt.

Private Methoden mit PowerMock verspotten

Um eine private Methode mit PowerMock zu verspotten, befolgen Sie diese Schritte:

  1. Spionieren Sie die Klasse aus: Erstellen Sie eine Spionageinstanz der Klasse, die enthält die private Methode, die Sie verspotten möchten. Dies kann mit der PowerMockito.spy()-Methode erreicht werden.
  2. Geben Sie das erwartete Methodenverhalten an: Verwenden Sie die when()-Methode, um das erwartete Verhalten der privaten Methode zu definieren. Dazu gehört die Angabe der Argumente und des Rückgabewerts. Verwenden Sie Methoden-Matcher wie anyString() und anyInt(), um unterschiedliche Werte zu verarbeiten.
  3. Führen Sie den Test aus: Rufen Sie die öffentliche Methode auf, die die private Methode aufruft, und stellen Sie das erwartete Verhalten sicher.

Beispiel:

Betrachten Sie den folgenden Kurs mit einer Öffentlichkeit Methode (meaningfulPublicApi()), die eine private Methode (doTheGamble()) aufruft:

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

Der entsprechende JUnit-Test mit PowerMock würde wie folgt aussehen:

<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() 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>

In diesem Beispiel:

  • Die Annotation @PrepareForTest markiert die Klasse CodeWithPrivateMethod zur Vorbereitung und ermöglicht so PowerMock, um seine private Methode zu ändern.
  • Die when()-Methode definiert den erwarteten Rückgabewert der doTheGamble()-Methode für alle Eingabeargumente.
  • Der Test überprüft, ob eine Ausnahme ausgelöst wird, wenn die öffentliche Methode wird ausgeführt.

Dieses einfache Beispiel zeigt, wie man private Methoden zum Testen mit PowerMock verspottet. Durch den Einsatz dieser Technik können Sie die Logik Ihrer öffentlichen Methoden effektiv isolieren und testen und so die Zuverlässigkeit Ihrer Software sicherstellen.

Das obige ist der detaillierte Inhalt vonWie verspotte ich private Methoden in Java mit PowerMock?. 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