JavaのStatic Privateメソッドをjunitでテストする方法

java

javaのstaticメソッドのprivate・protectedメソッドをjunitでテストする方法を紹介していきます。

[スポンサーリンク]

今回紹介する方法は、引数なしとありのprivateメソッドの2パターンのテスト方法を紹介していきます。
また、今回の方法を取り込むにあたって特別なプラグインやライブラリは不要です。

今回テストする対象のクラスはこちら!

引数なしとありのprivateメソッド2パターンをjunitを使ってテストしていきます。

public class BookUtil {

    private static String getTitle() {
        return "コンビニ人間";
    }

    private static String getArgTitle(Integer num) {
        return "火花" + num;
    }
}

引数なしのテスト方法

public class StaticPrivateTest {

    /**
     * staticのprivateをテストする方法、引数なし
     */
    @Test
    public void noArg() throws Exception {
        Method method = 
                BookUtil.class.getDeclaredMethod("getTitle");
        method.setAccessible(true);
         
        // staticの場合、invokeの第一引数はnullになります。
        String result = (String)method.invoke(null);
         
        assertThat(result, is("コンビニ人間"));
    }
}

解説

staticではないクラスのprivateメソッドのテスト方法はコチラで紹介していますが、違いとしては、13行目でstaticではないメソッドの場合はinvokeへクラスを指定するのですが、staticメソッドの場合はnullを指定します。

引数ありのテスト方法

public class StaticPrivateTest {

    /**
     * staticのprivateをテストする方法、引数なし
     */
    @Test
    public void arg() throws Exception {
        Method method = 
                BookUtil.class.getDeclaredMethod("getArgTitle", Integer.class);
        method.setAccessible(true);
         
        // staticの場合、invokeの第一引数はnullになります。
        String result = (String)method.invoke(null, 1);
         
        assertThat(result, is("火花1"));
    }
}

解説

引数なしの場合との違いは、getDeclaredMethodへは第二引数以降へ引数の型を渡して、invokeでは第二引数以降へ実際の値(引数)をセットするようになります。
ちなみに引数が複数ある場合は、第三・第四引数へと足していくことができますのでご安心を。

さいごに

staticじゃないprivateメソッドのテスト方法ってネットには結構あったのですが、staticなprivateメソッドのテスト方法ってすぐに見つからなかったですね。

でも結局はテスト方法は非常に似ていました。違いはinvokeへnull指定するかどうかだけというシンプルなものです。

それでは!