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方法将引发错误。

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