Java Mockito mocked类对象可以调用真实的方法吗?
您好,我有一个模拟类,对于它的大多数成员,我不介意它返回默认值,但可能有一些方法我希望模拟类对象使用真实的方法,您如何配置此测试?e、 gJava 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();
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!我不知道这个方法,非常感谢!是的,很高兴指出副作用。在我的例子中,它是一个小助手函数,所以我仍然很好。感谢您将此作为答案,显然是您的答案:)