Mockito Verify方法用于检查是否发生了某些行为。我们可以在测试方法代码的末尾使用Mockito验证方法,以确保调用了指定的方法。
本文将会主要介绍一下用法和功能:
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 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
在所有验证方法之后可以使用此方法,以确保所有交互都得到验证。如果模拟对象上存在任何未验证的交互,它将使测试失败。
// 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()
方法的行为与verifyNoMoreInteractions()
方法相同。
Map mockMap = mock(Map.class);
Set mockSet = mock(Set.class);
verify(mockList).isEmpty();
verifyZeroInteractions(mockList, mockMap, mockSet);
如果要验证仅调用了一个方法,则可以将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方法将引发错误。