[英]Nested mocked method is not getting called in Mockito
假设我有这种简单的情况。
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文件应用了ock-mock-maker-inline属性。
您能提出建议吗,我相信这种情况很普遍
正如@JoeC所写,这不是常见的情况。
原因是:您测试了Mockito的行为,但是应该测试您的代码行为。
为了做到这一点,您可以在不模拟的情况下实例化被测代码 ,并为其依赖项传递模拟。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.