1

String を返すプライベート関数の JUnit テストを作成しました。そして、それはうまく機能しています。

public void test2() throws Exception
{
    MyHandler handler = new MyHandler();
    Method privateStringMethod = MyHandler.class.getDeclaredMethod("getName", String.class);
    privateStringMethod.setAccessible(true);
    String s = (String) privateStringMethod.invoke(handler, 852l);
    assertNotNull(s);
}

ブール値を返す関数がもう 1 つありますが、これは機能しません。しかし、その中でコンパイル時エラーが発生していますCannot cast from Object to boolean.

public void test1() throws Exception
{
    MyHandler handler = new MyHandler();
    Method privateStringMethod = MyHandler.class.getDeclaredMethod("isvalid", Long.class);
    privateStringMethod.setAccessible(true);
    boolean s = (boolean) privateStringMethod.invoke(handler, 852l);
    assertNotNull(s);
}

どうすれば走れる?

4

2 に答える 2

4

私は、プライベート メソッドを単独でテストすることに完全に反対しています。単体テストは、クラスのパブリック インターフェイスに対して実行する必要があります (したがって、プライベート メソッドを誤ってテストしてしまいます)。これは、運用環境で処理される方法です。

プライベート メソッドをテストしたい小さなケースがあり、このメソッドを使用することはおそらく正しいと思いますが、テストしたいプライベート メソッドに出くわすたびに、冗長なコードをすべて書き留めることはありません。

于 2012-03-27T10:46:07.060 に答える
0

戻り値は、ブール オブジェクトに「自動ボックス化」されます。プリミティブを null にすることはできないため、null に対してテストしてはなりません。オートボクシングのため、.booleanValue() を呼び出してはなりません。

しかし、プライベート メソッドのテストに関しては、@alex.p と同じ意見です。

public class Snippet {

    @Test
    public void test1() throws Exception {
        final MyHandler handler = new MyHandler();
        final Method privateStringMethod = MyHandler.class.getDeclaredMethod("isvalid");
        privateStringMethod.setAccessible(true);
        final Boolean s = (Boolean) privateStringMethod.invoke(handler);
        Assert.assertTrue(s.booleanValue());
    }

    class MyHandler {
        private boolean isvalid() {
            return false;
        }
    }
}
于 2012-03-27T11:11:03.730 に答える