blog

日常・技術のことを記録する

Junitでプライベートフィールドにアクセスする方法

javaJunit単体テストを書いていて、 privateフィールドに定義した定数にアクセスするのってどうやるんやろと思ったときのメモ。

例: TargetClass.javaにprivate定数"FOO = 1"を定義しているとして、 テスト用クラスのTargetClassTest.javaで、FOO値を取得して自前の比較値とアサートする方法

TargetClass.java

private static final int FOO = 1;

TargetClassTest.java

@Test
public void testDefine() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {

    int hikakuyou_Foo = 1; // 比較用の値
    TargetClass t = new TargetClass(); // テスト対象のクラスをnew
    Class<? extends TargetClass> cls = t.getClass(); 
    Field fld_Foo = cls.getDeclaredField("FOO"); //取得したい定数フィールドを指定
    fld_Foo.setAccessible(true); //アクセス権限を付与

    // assert
    assertEquals(hikakuyou_Foo,fld_Foo.get(t));
    // 結果:比較用が[1]、実際の値が[1]でテスト成功
    }