クラスをモックし、モックされたオブジェクトのメソッドが呼び出されたときにオブジェクトのスタブ リストを返そうとしています。次のコードを考えてみましょう:
interface MyRepositry{
public List<MyClass> getMyClassInstances(String str,Long id,List<Integer> statusList);
}
上記のメソッド呼び出しを次のようにモックしています。
when(myRepository.getMyClassInstances("1234", 200L, stubbedList)).thenReturn(stubbedMyClassInstanceList);
どこ
stubbedList
は、2 つの整数 1 と 3 を挿入して作成するリストです。実際の呼び出しでも、整数 1 と 3 を持つ構築したリストを渡します。ここでの注意点は、stubbedList オブジェクトと実際の呼び出しのリスト オブジェクトは異なりますが、常に 2 つを含みます。整数 1 と 3。
stubbedMyClassInstanceList
MyClass インスタンスのスタブ リストです。
ただし、テストを実行すると、mockito は空のリストを返します。私はいくつかのデバッグを行いましたが、mockito は私が使用しているリスト オブジェクトと一致できないと思います
when(..).thenReturn(..)
呼び出しと実際の呼び出しで、正しい署名が見つかりません。
使えない
anyList()
私は常に2つの整数(1と3)のリストを渡すので、マッチャー。
カスタムを使用して問題を解決しました
ArgumentMatcher
次のように :
class StatusMatcher extends ArgumentMatcher<List> {
public boolean matches(Object list) {
List statuses = ((List) list);
return (statuses.size() == 2 && statuses.contains(1) && statuses.contains(3));
}
}
質問は次のとおりです。
1) スタブ/モッキングが正しく機能しない理由についての私の推測はありますか? 2)私が使用した解決策は正しいですか?