java - Mockito 何时不模拟而不是调用实际方法

标签 java class junit mocking mockito

我正在尝试模拟 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/

相关文章:

java - 如何检测xml节点的数量?

java - response.sendRedirect 不保留请求属性?

python - 关于 Python 'yield' 关键字的问题,我在其他地方没有找到答案,以及它在我正在处理的代码中的具体用途

Java 使用新类向现有类添加功能,同时仍然公开先前类的所有方法

java - 坚持特定的修订号

java - 在 Spring Boot 应用程序中添加 Angular

c++ - 如何选择 C++ 中的运算符重载?

java - 抽象类 protected 方法 junit 测试用例

java - Java中的线程间通信

java - Eclipse - 在控制台中看不到断言结果