Mockito 验证

Mockito 验证方法用于检查某些行为是否发生,我们可以使用测试方法代码末尾的 Mockito 验证方法来确保指定方法被调用。

马克思 检查

  • Mockito verify() 方法也可以用来测试方法调用次数也一样。我们可以测试准确次数,至少一次,至少在调用次数最多的模糊方法 *我们可以使用 verifyNoMoreInteractions() 所有 verify() 方法调用后,以确保一切都已被验证。如果任何方法调用仍然存在,它将失败并提供正确的信息
  • verifyZeroInteractions() 行为与 verifyNoMoreInteractions() 方法 相同
  • 我们可以使用 In Order() 方法来验证方法调用次序。我们可以跳过方法调用,但正在验证的方法必须是相同的顺序(

让我们来看看一些mockito验证方法的例子。

Mockito verify() 简单示例

1@Test
2void test() {
3    List<String> mockList = mock(List.class);
4    mockList.add("Pankaj");
5    mockList.size();
6    
7    verify(mockList).add("Pankaj");
8}

上面的验证方法将通过,如果在被嘲笑的列表对象上只呼叫一次add(Pankaj)

1verify(mockList, times(1)).size();

如果我们想确保一个方法被调用,但我们不关心论点,那么我们可以使用验证方法的ArgumentMatchers。

1verify(mockList).add(anyString());
2verify(mockList).add(any(String.class));
3verify(mockList).add(ArgumentMatchers.any(String.class));

请注意,org.mockito.Mockito类为Mockito框架中大多数有用的方法提供静态方法,这有助于我们通过使用导入静态导入流畅的代码。

Mockito 用次数验证

Mockito verify() 方法是 overloaded,第二种方法是 `verify(T mock, VerificationMode 模式)。

1verify(mockList, times(1)).size(); //same as normal verify method
2verify(mockList, atLeastOnce()).size(); // must be called at least once
3verify(mockList, atMost(2)).size(); // must be called at most 2 times
4verify(mockList, atLeast(1)).size(); // must be called at least once
5verify(mockList, never()).clear(); // must never be called

主持人( )

此方法可以在所有验证方法之后使用,以确保所有交互都被验证,如果对被嘲笑的对象有任何未经验证的交互,它将失败测试。

1// all interactions are verified, so below will pass
2verifyNoMoreInteractions(mockList);
3mockList.isEmpty();
4// isEmpty() is not verified, so below will fail
5verifyNoMoreInteractions(mockList);

verifyNoMoreInteractions()的第二次召唤将失败,错误消息如下:

 1org.mockito.exceptions.verification.NoInteractionsWanted: 
 2No interactions wanted here:
 3-> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:36)
 4But found this interaction on mock 'list':
 5-> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:34)
 6***
 7For your reference, here is the list of all invocations ([?] - means unverified).
 81. -> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:18)
 92. -> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:19)
103. [?]-> at com.journaldev.mockito.verify.MockitoVerifyExamples.test(MockitoVerifyExamples.java:34)

Mockito的伟大特征之一是例外信息,它清楚地指出我们的测试在哪里失败,所以我们可以轻松地修复它。

主持人( )

‘verifyZeroInteractions()’ 方法的行为与 verifyNoMoreInteractions() 方法相同。

1Map mockMap = mock(Map.class);
2Set mockSet = mock(Set.class);
3verify(mockList).isEmpty();
4verifyZeroInteractions(mockList, mockMap, mockSet);

Mockito 只验证方法调用

如果我们想验证只有一个方法被调用,那么我们可以使用只有()与验证方法。

1Map mockMap = mock(Map.class);
2mockMap.isEmpty();
3verify(mockMap, only()).isEmpty();

Mockito 验证召唤的顺序

我们可以使用InOrder来验证召唤的顺序.我们可以跳过任何方法来验证,但正在验证的方法必须以相同的顺序召唤。

1InOrder inOrder = inOrder(mockList, mockMap);
2inOrder.verify(mockList).add("Pankaj");
3inOrder.verify(mockList, calls(1)).size();
4inOrder.verify(mockList).isEmpty();
5inOrder.verify(mockMap).isEmpty();

摘要

Mockito verify() 方法可以用来确保被调用的模仿对象方法. 如果任何方法调用被错误删除,那么验证方法会引发错误。

您可以从我们的 GitHub 存储库中查看更多 Mockito 示例。

Published At
Categories with 技术
Tagged with
comments powered by Disqus