2017-11-22 17 views
0

私はmockitoでJunitテストを書いていますが、メソッド呼び出しが行われたことを確認したいと思います。問題は、異なるパラメータで複数のメソッド呼び出しがあり、そのうちの1つだけを確認したいということです。Mockito、いくつかのメソッド呼び出しの1つを確認してください

Eg : Below are 3 method calls from my code 
Metrics.emit(PhoneFailCount,0); 
Metrics.emit(PaymentFailCount,1); 
Metrics.emit(AddresseFailCount,1); 

私は

Metrics.emit(PaymentFailCount,1)が少なくとも一度呼ばれていることを確認するにはどうすればよいです。

私が直接行った場合 verify(Metrics).emit(PaymentFailCount, 1) 引数が異なっているとエラーが発生します。そのはMetrics.emit(PhoneFailCount、0)

と一致しようとしているので、私はArgumentCaptorを使用してみましたが、あなたは、この目的のためにArgumentCaptorを使用することができ、一度

おかげ

+0

'PhoneFailCount'、などとは何ですか?通常、変数は小文字で始まるcamelCaseで記述されます。このような標準を遵守しないと、コードを理解するのが難しくなります。 –

+0

"どちらのパラメータを一度にキャプチャすることはできません"というのはどういう意味ですか? ArgumentCaptorでこれを行うことができます。あなたがArgumentCaptorで試したところにあなたのコードを入れてください。 – pvpkiran

+0

@FlorianSchaetzの変数です。あなたの提案を心に留めてください。ありがとうございます – TheLion

答えて

1

で両方のパラメータをキャプチャすることはできません。以下のChecコード。

Metrics metrics = mock(Metrics.class); 

// run code that uses metrics 

verify(metrics, times(3)).emit(any(), anyInt()); 
verify(metrics).emit(PaymentFailCount, 1); 

すべての静的輸入はorg.mockito.Mockito.*から来る:これは、このような

ArgumentCaptor<String> captor1 = ArgumentCaptor.forClass(String.class); 

ArgumentCaptor<Integer> captor2 = ArgumentCaptor.forClass(Integer.class); 

verify(Metrics, times(3)).emit(captor1.capture(), captor2.capture); 

List<Integer> values = captor2.getAllValues; 
//assertIf values have values 0,1 and 1 
+0

返信ありがとうございます Captor1が「PaymentFailCount」を持っていると主張していて、captor2が「1」を持っていると主張しているため、Captor2がAddresseFailCountから値1を取得する可能性があるため、 – TheLion

+0

すべての呼び出しからすべての引数を取り込むことはキャプチャに関係しません。試しましたか ? – pvpkiran

0

利用コードを動作するはずです。

注:この方法では呼び出しの順序は保持されません。これは、テストが引き続き実行されるemitコールを並べ替える場合を意味します。引数人質に

0

代替がMockito.verify()でhamcrestマッチャーを使用しているが、確認しながら、あなたが照合するルールを設定する必要があります。

verify(Metrics, times(1)).emit(eq(PaymentFailCount),eq(1));

関連する問題