簡介
Mockito Verify方法用於檢查是否發生了某些行爲。我們可以在測試方法代碼的末尾使用Mockito驗證方法,以確保調用了指定的方法。
本文將會主要介紹一下用法和功能:
- Mockito verify
- Mockito verify()簡單示例
- Mockito驗證次數
- verifyNoMoreInteractions()
- verifyZeroInteractions()
- Mockito僅驗證方法調用
- Mockito驗證調用順序
- 小結
Mockito verify
Mockito verify()
方法也可以用於測試方法調用的數量。我們可以測試模擬方法的確切次數,至少測試一次,至少測試一次。在所有verify()方法調用之後.- 我們可以使用
verifyNoMoreInteractions()
來確保所有內容均已通過驗證。如果仍然有任何方法驗證,它將失敗並提供正確的消息。 verifyZeroInteractions()
行爲與verifyNoMoreInteractions()
方法相同。- 我們可以使用
inOrder()
方法來驗證方法調用的順序。我們可以跳過方法調用,但是要驗證的方法必須具有相同的順序。讓我們看一些模擬驗證方法示例。
@Test
void test() {
List<String> mockList = mock(List.class);
mockList.add("Pankaj");
mockList.size();
verify(mockList).add("Pankaj");
}
如果在模擬列表對象上僅調用一次add(“ Pankaj”)
,則上述verify方法將通過。與通過verify方法使用times(1)
參數調用相同。
verify(mockList, times(1)).size();
如果我們想確保調用了一個方法,但是我們不關心參數,則可以將ArgumentMatchers
與verify
方法一起使用。
verify(mockList).add(anyString());
verify(mockList).add(any(String.class));
verify(mockList).add(ArgumentMatchers.any(String.class));
請注意,org.mockito.Mockito
類爲Mockito框架中的大多數有用方法提供了靜態方法,這有助於我們通過使用import static
將其導入來編寫流暢的代碼。
Mockito驗證次數
Mockito verify() method is overloaded, the second one is verify(T mock, VerificationMode mode)
. We can use it to verify for the invocation count.
verify(mockList, times(1)).size(); //same as normal verify method
verify(mockList, atLeastOnce()).size(); // must be called at least once
verify(mockList, atMost(2)).size(); // must be called at most 2 times
verify(mockList, atLeast(1)).size(); // must be called at least once
verify(mockList, never()).clear(); // must never be called
verifyNoMoreInteractions()
在所有驗證方法之後可以使用此方法,以確保所有交互都得到驗證。如果模擬對象上存在任何未驗證的交互,它將使測試失敗。
// all interactions are verified, so below will pass
verifyNoMoreInteractions(mockList);
mockList.isEmpty();
// isEmpty() is not verified, so below will fail
verifyNoMoreInteractions(mockList);
第二次調用verifyNoMoreInteractions()
將失敗,並顯示以下錯誤消息:
org.mockito.exceptions.verification.NoInteractionsWanted:
No interactions wanted here:
-> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:36)
But found this interaction on mock 'list':
-> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:34)
***
For your reference, here is the list of all invocations ([?] - means unverified).
1. -> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:18)
2. -> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:19)
3. [?]-> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:34)
Mockito的一大功能是異常消息,它清楚地指出了測試失敗的地方,因此我們可以輕鬆地對其進行修復。
verifyZeroInteractions()
verifyZeroInteractions()
方法的行爲與verifyNoMoreInteractions()
方法相同。
Map mockMap = mock(Map.class);
Set mockSet = mock(Set.class);
verify(mockList).isEmpty();
verifyZeroInteractions(mockList, mockMap, mockSet);
Mockito驗證僅方法調用
如果要驗證僅調用了一個方法,則可以將only()
與verify方法一起使用。
Map mockMap = mock(Map.class);
mockMap.isEmpty();
verify(mockMap, only()).isEmpty();
Mockito驗證調用順序
我們可以使用InOrder
來驗證調用順序。我們可以跳過任何方法進行驗證,但是要驗證的方法必須以相同的順序調用。
InOrder inOrder = inOrder(mockList, mockMap);
inOrder.verify(mockList).add("Pankaj");
inOrder.verify(mockList, calls(1)).size();
inOrder.verify(mockList).isEmpty();
inOrder.verify(mockMap).isEmpty();
總結
Mockito verify()方法可用於確保模擬對象方法被調用。如果任何方法調用被錯誤地刪除,則verify方法將引發錯誤。