协慌网

登录 贡献 社区

如何验证未使用 Mockito 调用特定方法?

如何验证依赖对象的依赖项调用方法?

例如:

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>...);
}

这样,测试就可以自由地仅验证调用的内容。

另外,我发现我经常忘记检查 “无交互作用”,只是后来才发现应该调用的东西本不应该这样。

因此,我发现此模式对于捕获尚未经过特别验证的所有意外呼叫很有用。