java - 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");
这条线不是在嘲笑。而不是它调用实际方法。
我正在使用下面的罐子,
- 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");
推荐阅读
- javascript - 将 JS 变量从网站传递到 Chrome 扩展程序
- ios - 为什么线性渐变没有完全应用于ios按钮
- python - 将 boost::shared_ptrs 的向量的 std::vector 从 C++ 传递到 Python 的问题
- electron - 如何从电子的渲染过程中打开新的模式浏览器窗口
- javascript - React Leaflet 与分组层
- python - Pandas get_dummies 不断在列名后使用数字创建额外的列
- javascript - keyDown 处理程序在自定义 React 钩子中被触发两次而不是一次
- python - 如何使用元数据将音频文件放在目录中?
- subquery - 如何使用不同的标准多次拉取 MaxDate
- javascript - 我怎样才能让discord js随机选择两张图片?