【发布时间】:2020-01-24 03:40:47
【问题描述】:
我正在尝试模拟 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
我该如何调查这个问题?
【问题讨论】:
-
您的
when使用“myString”,但随后readParams方法使用“stringVal”-我猜是因为这两个值不同,when未被调用-尝试使用@987654326 @在你的when(...) -
对不起。我会编辑。都是字符串值。我认为字符串值没有问题。
-
您创建了一个
mock(C.class),但您的方法readParams使用的是完全不同的new C()。这正是依赖注入的目的;将其作为参数传递给readParams。 -
@JagadeesanKarunakaran,如果您希望我们帮助您,您应该发布实际代码。该代码无法编译:
public static String readParams(anyString)-anyString是什么?when(c.methodCall("myString").thenReturn(params);- 缺少括号。 -
您需要在A类中注入C类的mock。由于您已将A类的构造函数设为私有,您需要在readParams(String anyString, C c)中传递C类的模拟实例方法。
标签: java class junit mocking mockito