嗨,我有一个模拟类,对于它的大多数成员,我不介意它返回默认值,但可能有一些方法我希望模拟类对象使用真实的方法,你如何配置这个测试?例如
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,您可以使用thenCallRealMethod
或doCallRealMethod
,但要注意,当在mock(而不是spies)上调用时,它将在尚未初始化的实例上调用真正的方法。
这意味着所有字段都将为null,包括最终字段,并且您放入构造函数中的任何初始化都不会发生。如果方法依赖于任何状态,这将使它成为一个糟糕的选择;如果您调用的真正方法是您正在测试的单元,这将是一个非常糟糕的选择。
除非你的方法实际上是静态的,或者委托给你用Mockito清除的实例方法,否则你可能会发现只在正确初始化的间谍上调用真正的方法更安全。