PowerMock を使用して Java のプライベート メソッドをモックする方法

Susan Sarandon
リリース: 2024-11-04 08:14:01
オリジナル
461 人が閲覧しました

How to Mock Private Methods in Java with PowerMock?

PowerMock を使用したプライベート メソッドのテスト

ソフトウェア開発中、プライベートに依存するパブリック メソッドをテストする必要がある状況に遭遇することは避けられません。もの。このような場合、プライベート メソッドが正しく機能すると仮定すると、テスト プロセスを簡素化できます。 PowerMock は、テスト目的でプライベート メソッドをモックするメカニズムを提供する Java テスト フレームワークです。

PowerMock を使用したプライベート メソッドのモック

PowerMock を使用してプライベート メソッドをモックするには、次の手順に従います。手順:

  1. クラスのスパイ: モックしたいプライベート メソッドを含むクラスのスパイ インスタンスを作成します。これは、PowerMockito.spy() メソッドを使用して実現できます。
  2. 期待されるメソッドの動作を指定する: when() メソッドを使用して、プライベート メソッドの期待される動作を定義します。これには、引数と戻り値の指定が含まれます。さまざまな値を処理するには、anyString() や anyInt() などのメソッド マッチャーを使用します。
  3. テストを実行します: プライベート メソッドを呼び出すパブリック メソッドを呼び出し、期待される動作をアサートします。

例:

プライベート メソッド (doTheGamble()) を呼び出すパブリック メソッド (meaningfulPublicApi()) を含む次のクラスを考えます。

<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>
ログイン後にコピー

PowerMock を使用した対応する JUnit テストは次のようになります。

<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>
ログイン後にコピー

この例では:

  • @PrepareForTest アノテーションは、CodeWithPrivateMethod クラスを準備用としてマークし、 PowerMock はプライベート メソッドを変更します。
  • when() メソッドは、入力引数に対する doTheGamble() メソッドの期待される戻り値を定義します。
  • テストは、

この簡単な例は、PowerMock を使用してテスト用にプライベート メソッドを模擬する方法を示しています。この手法を活用すると、パブリック メソッドのロジックを効果的に分離してテストでき、ソフトウェアの信頼性を確保できます。

以上がPowerMock を使用して Java のプライベート メソッドをモックする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート