JUnit を使用して、内部のプライベート メソッド、フィールド、またはネストされたクラスを持つクラスをテストするにはどうすればよいですか?
テストを実行できるようにするためだけにメソッドのアクセス修飾子を変更するのは良くないようです。
ベストアンサー1
レガシーなJavaアプリケーションがあり、メソッドの可視性を変更できない場合、プライベートメソッドをテストする最良の方法は、反射。
内部的には、変数の取得/設定private
やメソッドのprivate static
呼び出しにヘルパーを使用しています。次のパターンを使用すると、プライベート メソッドとフィールドに関連するほとんどすべての操作を実行できます。もちろん、リフレクションを通じて変数を変更することはできません。private
private static
private static final
Method method = TargetClass.getDeclaredMethod(methodName, argClasses);
method.setAccessible(true);
return method.invoke(targetObject, argObjects);
フィールドの場合:
Field field = TargetClass.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(object, value);
ノート:
TargetClass.getDeclaredMethod(methodName, argClasses)
メソッドを調べることができますprivate
。 にも同じことが当てはまりますgetDeclaredField
。setAccessible(true)
プライベートで遊ぶにはが必要です。