static class Foo {
public void bar(int i) {}
}
@Test
public void foo() {
Foo f = Mockito.spy(new Foo());
f.bar(42);
Mockito.verify(f, Mockito.times(1)).bar(42);
f.bar(42);
Mockito.verify(f, Mockito.times(1)).bar(42);
}
导致org.mockito.exceptions.verification.TooManyActualInvocations
(想要1次,但是2次)在最后一行。在调试节目中运行它,InvocationMatcher
忽略了第一次调用已经过验证的事实。并且它不依赖于女性确切的匹配器被传递到bar
。我做错了什么,或者是Mockito的错误?
答案 0 :(得分:3)
没有错误。库的实现者认为单个测试方法中的多个调用不是最佳实践。有两种方法可以解决这个问题:
f.bar()
次调用使用单独的测试并单独测试。Mockito.reset(f)
。它重置了间谍f
的状态;例如,如果您插入了doThrow(new Exception).when(f).bar(45)
之类的模拟调用,则会在reset()
调用后重置。但第二次验证适用于times(1)
。