如何validation一个特定的方法没有使用Mockito调用?
如何validation一个方法不被调用的对象的依赖?
例如:
public interface Dependency { void someMethod(); } public class Foo { public bar(final Dependency d) { ... } }
用Footesting:
公共类FooTest { @testing public void dependencyIsNotCalled(){ 最后Foo foo = new Foo(...); 最后的依赖依赖= mock(Dependency.class); foo.bar(依赖性); //在这里validationsomeMethod没有被调用? } }
更有意义的是:
import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; // ... verify(dependency, never()).someMethod();
这个特性的文档在那里§4“validation调用的确切数量/至lessx /从不” ,而never
javadoc在这里 。
使用Mockito.verify
方法的第二个参数,如下所示:
verify(dependency, Mockito.times(0) ).someMethod()
作为更通用的模式,我倾向于在testing中使用@After
模块:
@After public void after() { verifyNoMoreInteractions(<your mock1>, <your mock2>...); }
然后testing是自由地validation什么应该叫。
另外,我发现我经常忘记检查“没有互动”,只是后来才发现,事情本来是不应该的。
所以我觉得这个模式很有用,可以捕捉所有未经validation的意外调用。
verifyNoMoreInteractions()
和verifyZeroInteracions()
方法在内部都有相同的实现:
public static transient void verifyNoMoreInteractions(Object mocks[]) { MOCKITO_CORE.verifyNoMoreInteractions(mocks); } public static transient void verifyZeroInteractions(Object mocks[]) { MOCKITO_CORE.verifyNoMoreInteractions(mocks); }
所以我们可以在模拟对象或模拟对象数组上使用它们中的任何一个,以检查是否没有使用模拟对象调用方法。