让我们假设我有这个简单的场景。
package kivoxdaemon.utils;
import org.junit.Test;
import org.mockito.Mockito;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
public class TempTest {
@Test
public void test() {
TestMock testMock = Mockito.mock(TestMock.class);
Mockito.doCallRealMethod().when(testMock).method1();
Mockito.doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
System.out.println("Mock method3");
return null;
}
}).when(testMock).method3();
testMock.method1();
}
}
class TestMock {
void method1() {
System.out.println("method1");
method2();
}
private void method2() {
System.out.println("method2");
method3();
}
void method3() {
System.out.println("method3");
}
}
此代码在控制台中具有以下输出:
方法1
方法2
方法3
而我希望它是
方法1
方法2
模拟方法3
方法3被嘲笑,为什么不被调用?
如果调用链是从一个真正的公共方法开始的,那么你可以建议如何实现这种我认为非常常见的场景,但是其他一些内部调用的方法必须被模拟吗?
提前谢谢。
UPD:刚想通知是因为通过org.mockito.plugins.MockMaker文件应用了mock-maker-inline属性。
答案 0 :(得分:0)
你能否建议如何实施我认为非常常见的情况
正如@JoeC所写,这是不是的常见场景。
原因是:您测试 Mockito 的行为,但您应该测试您的代码行为。
为了做到这一点,你要在测试下实例化你的代码,而不是嘲笑它,并为其依赖项传递模拟。