Junitでプライベートフィールドにアクセスする方法
javaのJunitで単体テストを書いていて、 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]でテスト成功 }