java - 验证方法调用而不在 Spy 上执行其实际实现

标签 java unit-testing junit mockito

让我们假设以下测试

public void someTest() throws Exception {
   Foo foo = spy(new Foo());
   foo.someMethod(); // invokes methodToBeVerified()
   verify(foo).methodToBeVerified();
}

当测试执行时,它会调用 foo.methodToBeVerified() 的实际实现。我希望测试来验证是否已调用该特定方法但是我不希望执行其实现。是否可以使用 Mockito 的 Spy 来做到这一点?

最佳答案

是的,使用

doNothing().when(foo).methodToBeVerified();

如下例所示

public class FooTest {

    static class Foo {

        public void someMethod() {
            System.out.println("someMethod called");
            System.out.println("calling method to be verified...");
            methodToBeVerified();
        }

        public void methodToBeVerified() {
            System.out.println("methodToBeVerified called");
        }
    }

    @Test
    public void someTest() throws Exception {
        Foo foo = spy(new Foo());
        doNothing().when(foo).methodToBeVerified();
        foo.someMethod();
        verify(foo).methodToBeVerified();
    }

}
<小时/>

作为引用,您正在寻找的内容称为部分模拟Real (spied) partial mocks从 1.8.0 开始在 Mockito 中得到支持。

关于java - 验证方法调用而不在 Spy 上执行其实际实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34412605/

相关文章:

java - 线程调度——共享数组

Java使用多个表迭代HQL结果

java - 在 QueryContext Oracle 的数字 varchar 字段中附加前导零

unit-testing - 在简单的 CRUD 前端应用程序中进行单元测试的目的是什么?

c# - 用于生成在另一个程序集中具有随机数据的内联构造函数的类的库?

java - @Spy 在两个列表上注释时不起作用

intellij-idea - IntelliJ 14 + gradle问题与测试中的系统属性

java - 在 Eclipse IDE 中确定 .class 来自哪个 jar

maven - 如何在 Maven 依赖项中使用 JUnit 5.2 BOM?

javascript - Sinon如何对异步函数进行单元测试的 stub 方法