Java Mockito mocked类对象可以调用真实的方法吗?

Java Mockito mocked类对象可以调用真实的方法吗?,java,unit-testing,junit,mockito,Java,Unit Testing,Junit,Mockito,您好,我有一个模拟类,对于它的大多数成员,我不介意它返回默认值,但可能有一些方法我希望模拟类对象使用真实的方法,您如何配置此测试?e、 g public class MyClass { public int func1() { return 1; } public int func2() { return 2; } public int run() { return func1() + func2();

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

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);
    }
}
我不想使用spy,因为对于大多数我不关心的方法,我必须在什么时候进行设置。

如评论中所述,您可以使用或,但请注意,在mock(而不是spies)上调用时,它将在尚未初始化的实例上调用真正的方法

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


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

Nice!我不知道这个方法,非常感谢!是的,很高兴指出副作用。在我的例子中,它是一个小助手函数,所以我仍然很好。感谢您将此作为答案,显然是您的答案:)