我有一个有两种方法的课。我想用预期的结果替换第二种方法的调用。
这是我的课程
public class A {
public int methodOne() {
return methodTwo(1);
}
public int methodTwo(int param) {
// corresponding logic replaced for demo
throw new RuntimeException("Wrong invocation!");
}
}
并测试
public class ATest {
@Test
public void test() {
final A a = spy(new A());
when(a.methodTwo(anyInt())).thenReturn(10);
a.methodOne();
verify(a, times(1)).methodTwo(anyInt());
}
}
为什么我在开始测试时会遇到异常?
答案 0 :(得分:2)
有两件事可以帮助你。首先,从文档中看来,您需要将do*()
api与spy()
个对象一起使用。第二,打电话给真实的"您需要使用doCallRealMethod()
这里有适合您的更新测试:
public class ATest {
@Test
public void test() {
final A a = spy(new A());
doReturn(10).when(a).methodTwo(anyInt());
doCallRealMethod().when(a).methodOne();
a.methodOne();
verify(a, times(1)).methodTwo(anyInt());
}
}