表題の通り、備忘録として。
Target.java(テスト対象クラス)
public class Target { private String str = "test"; public String getStr() { return this.str; } private String thisIsPrivateMethod(Integer number) { return number == 1 ? "One" : "Other"; } }
TargetTest.java(テストクラス)
puclic class TargetTest { Field field; Method thisIsPrivateMethod; @Before public void setup() { // Targetクラスのstrフィールドにアクセス可能 field = Target.class.getDeclaredField("str"); field.setAccessible(true); // TargetクラスのthisIsPrivateMethodメソッドにアクセス可能(getDeclareMethodの第1引数はメソッド名、第2引数以降は対象メソッドのパラメータの型) thisIsPrivateMethod = Target.class.getDeclareMethod("thisIsPrivateMethod", Integer.class); thisIsPrivateMethod.setAccessible(true); } @Test public void privateField() { Target target = new Target(); // Targetインスタンスのstrフィールドに"tagbengers"をセット field.set(target, "tagbangers"); Assert.assertEquals("tagbangers", target.getStr()); } @Test public void privateMethod() { Target target = new Target(); Assert.assertEquals("One", thisIsPrivateMethod.invoke(target, 1)); } }
こんな感じでユニットテストかけます。