如何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); } 

所以我们可以在模拟对象或模拟对象数组上使用它们中的任何一个,以检查是否没有使用模拟对象调用方法。