は広く、私の現在のプロジェクトで使用されているパターンがあります:ユニットテストでパラメータを注入するメソッドを呼び出す方法は?
private Collection<Converter<T>> converters = new HashSet<>();
@Inject
private void init(@Any Instance<Converter<T>> converters) {
for (Converter<T> converter : converters) {
this.converters.add(converter);
}
}
私が欲しいと彼らは自動的に私のBeanに注入されて、私はできるだけ多くのコンバータを作成することができますこの方法です。
私の問題は今テスト中です:コンバーターのコレクションは自分のコードで使われていますが、Junitはinit(..)
メソッドを呼び出さないので、それを呼んでモックされたコンバータを設定する必要があります。
私はメソッドを保護することができましたが、私はメソッドの可視性の範囲を変更しているので、それでOKだと感じません。
また、リフレクションを使用してメソッドを呼び出すこともできますが、これも正しいとは限りません。
このコードは、このコードをよりテスト可能に改善できるという結論に至りました。
私はこのコードを変更して、テスト容易性は向上しますが、参照は自動的に注入されますか?
どうしてこのように進む必要がありますか?フィールドコンバーターのタイプとしてインスタンスを保持してフィールドに直接注入するのはなぜですか? –
@ NicolasFilottoを実行すると、コレクションの各イテレータでmy Converterの新しいインスタンスが作成されます – JSBach