Mockito验证
Mockito Verify方法用于检查是否发生了某些行为。
我们可以在测试方法代码的末尾使用Mockito验证方法,以确保调用了指定的方法。
Mockito验证
Mockito verify()方法也可以用于测试方法调用的数量。
我们可以测试模拟方法的确切次数,至少一次,至少最多一次。我们可以在所有verify()方法调用之后使用
verifyNoMoreInteractions()
,以确保所有内容均已通过验证。
如果仍然有任何方法验证,它将失败并提供正确的消息。verifyZeroInteractions()的行为与verifyNoMoreInteractions()方法相同。
我们可以使用
inOrder()
方法来验证方法调用的顺序。
我们可以跳过方法调用,但是要验证的方法必须具有相同的顺序。
Mockito verify()简单示例
@Test void test() { List<String> mockList = mock(List.class); mockList.add("hyman"); mockList.size(); verify(mockList).add("hyman"); }
如果在模拟列表对象上仅调用一次add(" hyman")",则上述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()方法已重载,第二个方法是verify(T模拟,VerificationMode模式)
。
我们可以使用它来验证调用计数。
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.theitroad.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:36) But found this interaction on mock 'list': -> at com.theitroad.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:34) *** For your reference, here is the list of all invocations ([?] - means unverified). 1. -> at com.theitroad.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:18) 2. -> at com.theitroad.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:19) 3. [?]-> at com.theitroad.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("hyman"); inOrder.verify(mockList, calls(1)).size(); inOrder.verify(mockList).isEmpty(); inOrder.verify(mockMap).isEmpty();