我正在尝试模拟 Java 类。
我的测试课,
@RunWith(MockitoJunitRunner.class)
public class ATest {
@Test
public void readContent() throws Exception {
Map<String, String> params = new HashMap<>();
params.put("key", "value");
C c = Mockito.mock(C.class);
when(c.methodCall("myString")).thenReturn(params);
String response = A.readParams("anyString");
}
}
public class A{
private A(){
}
public static String readParams(anyString){
C c = new C();
Map<String, String> map = c.methodCall("myString");
return "returnString";
}
}
这里,
Map<String, String> map = c.methodCall("myString");
这句话并不是在 mock 。而不是调用实际方法。
我正在使用下面的 jar ,
- byte-buddy-1.9.5.jar
- mockito-core-2.23.4.jar
- objenesis-3.0.1.jar
如何调查此问题?
最佳答案
问题是您正在模拟 C,并且在 readParams 方法中创建了一个完整的新 C 对象,并且您的模拟对象从未被使用。我稍微修改了你的方法来解决这个问题。
public static String readParams(C c, String anyString){
Map<String, String> map = c.methodCall("myString");
return "returnString";
}
当你初始化响应时,你可以更改为以下代码,传递你模拟的c。
String response = A.readParams(c, "anyString");
关于java - Mockito 何时不模拟而不是调用实际方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59676753/