![](/img/trans.png)
[英]Can we verify a method is called on one of the several objects using Mockito
[英]Mockito, Verify one of the method call among several
我正在用 mockito 編寫一個 Junit 測試,我想驗證一個方法調用是否已進行。 問題是使用不同的參數進行了多個方法調用,我只想驗證其中一個。
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)
它會拋出錯誤,說 Argument(s) 不同! 因為它試圖與 Metrics.emit(PhoneFailCount,0) 匹配
我嘗試使用 ArgumentCaptor,但無法同時捕獲兩個參數
謝謝
您可以為此使用ArgumentCaptor。 在下面選擇此代碼。 這應該工作
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
使用如下代碼:
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.*
。
注意:這種方式不會保留調用順序,這意味着,如果您對emit
調用進行重新排序,則測試仍將通過。
除了參數捕獲器Mockito.verify()
,還可以在Mockito.verify()
使用hamcrest匹配器,但是在驗證時必須設置要匹配的規則:
verify(Metrics, times(1)).emit(eq(PaymentFailCount),eq(1));
這是一個舊線程,但僅用於記錄:使用當前的 mockito 版本,您可以這樣寫:
verify(Metrics, atLeastOnce()).emit(PaymentFailCount, 1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.