プライベートメソッド、フィールド、または内部クラスを持つクラスをテストするにはどうすればよいですか? 質問する

プライベートメソッド、フィールド、または内部クラスを持つクラスをテストするにはどうすればよいですか? 質問する

JUnit を使用して、内部のプライベート メソッド、フィールド、またはネストされたクラスを持つクラスをテストするにはどうすればよいですか?

テストを実行できるようにするためだけにメソッドのアクセス修飾子を変更するのは良くないようです。

ベストアンサー1

レガシーなJavaアプリケーションがあり、メソッドの可視性を変更できない場合、プライベートメソッドをテストする最良の方法は、反射

内部的には、変数の取得/設定privateやメソッドprivate static呼び出しにヘルパーを使用しています。次のパターンを使用すると、プライベート メソッドとフィールドに関連するほとんどすべての操作を実行できます。もちろん、リフレクションを通じて変数を変更することはできませんprivateprivate staticprivate 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);

ノート:

  1. TargetClass.getDeclaredMethod(methodName, argClasses)メソッドを調べることができますprivate。 にも同じことが当てはまりますgetDeclaredField
  2. setAccessible(true)プライベートで遊ぶにはが必要です

おすすめ記事