の一覧を注入:私はそれがMockitoを使用するためのテストを作成したいと思いますMockito - 私は次のコードを持っているモック
@Component
public class Wrapper
{
@Resource
private List<Strategy> strategies;
public String getName(String id)
{
// the revelant part of this statement is that I would like to iterate over "strategies"
return strategies.stream()
.filter(strategy -> strategy.isApplicable(id))
.findFirst().get().getAmount(id);
}
}
@Component
public class StrategyA implements Strategy{...}
@Component
public class StrategyB implements Strategy{...}
を。次のように 私がテストを書いた:
@InjectMocks
private Wrapper testedObject = new Wrapper();
// I was hoping that this list will contain both strategies: strategyA and strategyB
@Mock
private List<Strategy> strategies;
@Mock
StrategyA strategyA;
@Mock
StrategyB strategyB;
@Test
public void shouldReturnNameForGivenId()
{ // irrevelant code...
//when
testedObject.getName(ID);
}
私はライン上でNullPointerExceptionが取得しています:
filter(strategy -> strategy.isApplicable(id))
、「戦略」リストが初期化されていると述べているが、空です。 MohitoはSpringと同じように動作しますか?インターフェース "戦略"を実装しているすべてのインスタンスを自動的にリストに追加しますか?
Btw私はWrapperクラスにセッターを持っていません。できるだけその方法で残したいと思います。
トーマスは、春には何らかの形で知っているに明示的に「戦略」のリストを設定する必要はありませんした溶液を得るために期待していたので、Mockitoが続くことができれば、私は思っていました同じ考え。それ以外に、私はWrapperクラスに "setStrategies"セッターを追加したくありません。 – fascynacja
Springは、(アプリケーションコンテキスト)を伝えるか、規約(例:Types)を使用するかのどちらかを知っています。しかし、私はSpringがGeneric Listを配線することはできないと確信しています。コンパイラは、タイプ消去フェーズのためバイトコードに書き込まないため、実行時にタイプ情報も使用できません。 だから、私は/プログラミングを教えずにモックを含む模擬リストを作成することはできないと思います。 –
springはstrategyAとstrategyB beanを注入して "Wrapper"クラスをワイヤリングできます。アプリケーションのコンテキストは注釈に基づいてのみ構築されるので、私はMockitoも同じことをやり遂げることを望んでいました。 – fascynacja