首页 > 解决方案 > Mockito when 不是模拟而不是调用实际方法

问题描述

我正在尝试模拟 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"); 

这条线不是在嘲笑。而不是它调用实际方法。

我正在使用下面的罐子,

我该如何调查这个问题?

标签: javaclassjunitmockingmockito

解决方案


问题是您正在模拟 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");

推荐阅读