2017-05-19 12 views
1

ように私は、単純なユニットテストMockitoのスパイオブジェクトは、任意の(と検証)引数

Map<String, String> spyMap = spy(Map.class); 
spyMap.put("a", "A"); 
spyMap.put("b", "B"); 

InOrder inOrder = inOrder(spyMap); 

inOrder.verify(spyMap).put(any(), any()); 
inOrder.verify(spyMap).put(any(), any()); 

を持っている。しかし、これはエラーをスローします。次の作品:

inOrder.verify(spyMap).put("a", "A"); 
inOrder.verify(spyMap).put("b", "B"); 

私は正確な文字列の一致のみでテストできますか?それは私にとっては限界があるようです。私のテストメソッドは実際にはランダムなStringを生成するので、マップに何が正確に挿入されるのかはわかりません。私はArgumentCaptorメソッドを使ってみましたが、それもうまくいきませんでした。

Map<String, String> spyMap = spy(Map.class); 
spyMap.put("a", "A"); 
spyMap.put("b", "B"); 

ArgumentCaptor<String> arg1 = ArgumentCaptor.forClass(String.class); 
ArgumentCaptor<String> arg2 = ArgumentCaptor.forClass(String.class); 

verify(spyMap).put(arg1.capture(), arg2.capture()); 

答えて

2

ここでの問題は、それはあなたが二回putを呼び出し、単一の呼び出しを検証しようとしているという事実だ、any()マッチャーではありません。代わりに、あなたはtimesVerificationMode使用する必要があります。

inOrder.verify(spyMap, times(2)).put(any(), any()); 
// Here ---------------^ 
+1

働いていました!ありがとうございました!!!! – user2689782

関連する問題