如何验证不依赖对象的依赖项调用方法?
例如:
public interface Dependency {
void someMethod();
}
public class Foo {
public bar(final Dependency d) {
...
}
}
通过 Foo 测试:
public class FooTest {
@Test
public void dependencyIsNotCalled() {
final Foo foo = new Foo(...);
final Dependency dependency = mock(Dependency.class);
foo.bar(dependency);
**// verify here that someMethod was not called??**
}
}
更有意义的是:
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
// ...
verify(dependency, never()).someMethod();
有关此功能的文档,请参见 §4“验证确切的调用次数 / 至少 x / never” ,并且never
Javadoc 在此处。
Mockito.verify
方法上使用第二个参数,如下所示:
Mockito.verify(dependency, Mockito.times(0)).someMethod()
作为更通用的模式,我倾向于在测试中@After
@After
public void after() {
verifyNoMoreInteractions(<your mock1>, <your mock2>...);
}
这样,测试就可以自由地仅验证应调用的内容。
另外,我发现我经常忘记检查 “无交互作用”,只是后来才发现应该调用的东西本不应该这样。
因此,我发现此模式对于捕获尚未经过特别验证的所有意外呼叫很有用。