我有一个有两个方法的类。我想用预期的结果替换第二个方法的调用。
下面是我要测试的类
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());
}
}
为什么我得到一个异常时,开始测试?
这里有两件事可以帮助您。首先,从文档来看,您似乎需要将do*()
api与spy()
对象一起使用。其次,要调用"real"方法,需要使用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());
}
}