Mockito Verify的使用

簡介

Mockito Verify方法用於檢查是否發生了某些行爲。我們可以在測試方法代碼的末尾使用Mockito驗證方法,以確保調用了指定的方法。
本文將會主要介紹一下用法和功能:

  1. Mockito verify
    • Mockito verify()簡單示例
    • Mockito驗證次數
    • verifyNoMoreInteractions()
    • verifyZeroInteractions()
    • Mockito僅驗證方法調用
    • Mockito驗證調用順序
  2. 小結

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();

如果我們想確保調用了一個方法,但是我們不關心參數,則可以將ArgumentMatchersverify方法一起使用。

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方法將引發錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章