Mockito-是否验证方法重新启动次数?

Car*_*nte 5 java junit unit-testing mockito

如果我们有以下代码:

@Test
public void test1(){
  Interface1 i1 = mock(Interface1.class)
  method1(); // This method calls i1.mockedmethod()
  verify(i1, times(1)).mockedmethod();
  method1();
  verify(i1, times(2)).mockedmethod();
}
Run Code Online (Sandbox Code Playgroud)

我知道它将通过第一个验证,但是我对第二个验证有疑问。验证方法是否对调用该方法的所有时间进行计数,还是仅自上次验证以来进行计数?

OHY*_*OHY 31

请注意,可以使用 Mockito.reset(mock) 重置调用方法的时间

更新:如下面的 t7tran 建议,使用 clearInvocations(T... mocks) 将仅重置调用次数


coo*_*ort 18

使用void reset(T... mocks)将重置模拟上的所有存根。如果您只需要为后续验证重置调用计数,请使用void clearInvocations(T... mocks)

  • @JohnK,他们只是很戏剧性,并将他们想要的测试设计模式强加给读者(并且应该说“每个测试方法最多只能断言一次,因此不要使用这种反模式”)。 (4认同)
  • 为什么“clearIncations”的链接文档说“不惜一切代价尽量避免使用此方法。只有在无法有效测试程序时才清除调用”?(可能的)副作用是什么? (2认同)

Sho*_*tch 8

创建后,模拟将记住所有交互。然后,您可以有选择地验证您感兴趣的任何交互

这意味着,每次调用所需的方法时,模拟都会计数,并且在调用时不会重置verify

如果您想要有关此的更多信息,请阅读以下内容(这是我在其中找到这些信息的地方):

http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html