web-dev-qa-db-ja.com

PowerMockito 1.6を使用して静的メソッド呼び出しを確認する

以下に示すサンプルに似たメソッドのJUnitテストケースを書いています。

Class SampleA{
    public static void methodA(){
        boolean isSuccessful = methodB();
        if(isSuccessful){
            SampleB.methodC();
        }
    }

    public static boolean methodB(){
        //some logic
        return true;
    }
}

Class SampleB{
    public static void methodC(){
        return;
    }
}

テストクラスで次のテストケースを作成しました。

@Test
public void testMethodA_1(){
    PowerMockito.mockStatic(SampleA.class,SampleB.class);

    PowerMockito.when(SampleA.methodB()).thenReturn(true);
    PowerMockito.doNothing().when(SampleB.class,"methodC");

    PowerMockito.doCallRealMethod().when(SampleA.class,"methodA");
    SampleA.methodA();
}

ここで、Sample Bクラスのstatic methodC()が呼び出されているかどうかを確認したいと思います。 PowerMockito 1.6を使用するにはどうすればよいですか?多くのことを試しましたが、うまくいっていないようです。どんな助けでもありがたいです。

11
Prerak Tiwari

個人的には、PowerMockなどが、コードに問題がなければ問題が発生しないはずの問題の解決策だと言わざるを得ません。場合によっては、フレームワークなどが静的メソッドを使用するために必要です。これは、他の方法では簡単にテストできないコードにつながりますが、それがあなたのコードに関するものである場合は、静的モックではなく常にリファクタリングを優先する必要があります。

とにかく、PowerMockitoでそれを確認することはそれほど難しくありません...

PowerMockito.verifyStatic( Mockito.times(1)); // Verify that the following mock method was called exactly 1 time
SampleB.methodC();

(もちろん、これが機能するためには、SampleBを@PrepareForTestアノテーションに追加し、mockStaticを呼び出す必要があります。)

32
Florian Schaetz