3

BaseClassテストメソッドにjunitテストを書いています。このメソッドは、スーパー クラス メンバーを使用します。コンストラクターはをBaseClass呼び出しますsuper(arg1, arg2)。super(arg1, arg2) コンストラクターには、スーパー クラスのプライベート メンバーを設定する依存性インジェクターがあります。テストを実行しているとき、依存関係が設定されていないため、super() が例外をスローしています。依存性注入でプライベートメンバーを設定しているsuper()のステートメントのみをモックしたい。モキットをどうするか?

4

1 に答える 1

2

フィールド注入は常にテストの問題です。したがって、選択肢があるときはいつでも、代わりにコンストラクター注入を選択してください。

依存関係インジェクターを開始して、実際のクラスの代わりにモックを注入することができます。ソリューションは、実際に使用する DI フレームワーク (guice、cdi など) によって異なります。guice の場合は、jukito、cdi Arquillian などを使用できます。ただし、テストの実行が遅くなり、テスト クラスが複雑になります。

別の方法として、テストクラスのインスタンスにプライベートフィールドを反映させ、単にモックを設定することもできます。何かのようなもの:

instance = new TestObject();
Field injected = TestObject.class.getDeclaredField("injected");
injected.setAccessible(true);
injected.set(instance, mock(InjectedType.class));

whileTestObjectはテストするクラス、injected何かが注入されるInjectedTypeプライベート フィールド、そのプライベート フィールドの型です。

于 2013-07-11T13:17:56.147 に答える