JUnit-Addons
てのがあったんですね、知らなかった。
Privateメソッドのテスト自体ふんふんとid:t-doiさんに言われてしまいましたが、
そういうのは、リフレクションでやるものだと思ってました。
こういうのもあるんですな。
せっかくなので、書いたコードを・・・ってJavaWorldの引用ですが。
テストしたいクラス
package com.seigi.priv; public class WithPrivate { private static int field1; public static void main(String[] args) { field1 =10; WithPrivate withPrivate = new WithPrivate(); int ans = withPrivate.prv(10); System.out.println("ans==>"+ans ); } private int prv(int a){ if (field1 == 0) { throw new IllegalStateException(); } return this.field1*a; } }
テストクラス
package com.seigi.priv; import junit.framework.TestCase; import junitx.util.PrivateAccessor; import junitx.util.ThrowableUtil; public class WithPrivateTest extends TestCase { public void testPrv_成功()throws Throwable { WithPrivate private1 = new WithPrivate(); //フィールドに値をセット PrivateAccessor.setField(private1, "field1", new Integer(10)); //privateメソッドを呼び出し Integer actual = (Integer)PrivateAccessor.invoke(private1,"prv", new Class{int.class},new Object{new Integer(5)}); //検証 assertEquals("積になる", 10*5, actual.intValue()); } public void testPrv_例外()throws Throwable { WithPrivate private1 = new WithPrivate(); //フィールドに値をセット PrivateAccessor.setField(private1, "field1", new Integer(0)); try { //privateメソッドを呼び出し PrivateAccessor.invoke(private1,"prv", new Class{int.class},new Object{new Integer(5)}); fail("例外発生"); } catch (IllegalStateException e) { System.out.println("Catch!!!"); } } }