[英]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.