可以用Mockito模拟类对象调用真正的方法



嗨,我有一个模拟类,对于它的大多数成员,我不介意它返回默认值,但可能有一些方法我希望模拟类对象使用真实的方法,你如何配置这个测试?例如

public class MyClass {
    public int func1() {
        return 1;
    }
    public int func2() {
        return 2;
    }
    public int run() {
        return func1() + func2();
    }
}
public class MyTest {
    @Mock private MyClass mockedClass
    @Before public void setup() {initMocks(this);}
    @Test public void test() {
        int result = mockedClass.func2();//I want the real func2() to run
        assertEquals(2, result);
        result = mockedClass.run();//I want the real run() and func2() to run
        assertEquals(2, result);
    }
}

我不想使用间谍,因为我必须在时设置,因为大多数方法我都不在乎。

正如注释中提到的user3707125,您可以使用thenCallRealMethoddoCallRealMethod,但要注意,当在mock(而不是spies)上调用时,它将在尚未初始化的实例上调用真正的方法。

这意味着所有字段都将为null,包括最终字段,并且您放入构造函数中的任何初始化都不会发生。如果方法依赖于任何状态,这将使它成为一个糟糕的选择;如果您调用的真正方法是您正在测试的单元,这将是一个非常糟糕的选择。

除非你的方法实际上是静态的,或者委托给你用Mockito清除的实例方法,否则你可能会发现只在正确初始化的间谍上调用真正的方法更安全。

相关内容

  • 没有找到相关文章

最新更新