java - 使用任何传递的参数模拟返回

标签 java unit-testing mockito

在尝试模拟 MavenXpp3Reader 时,尽管我尝试模拟返回,但 read() 方法仍然为空。这是我的尝试

    String testVer = "1.0.0.TEST";
    MavenXpp3Reader mockReader = mock(MavenXpp3Reader.class);
    Model mockModel = mock(Model.class);
    when(mockModel.getVersion()).thenReturn(testVer);
    when(mockReader.read(new FileReader("pom.xml"))).thenReturn(mockModel);

    Model model = mockReader.read(new FileReader("pom.xml"));

model 保持为空。基本上,无论传递什么参数,每当调用 MavenXpp3Reader.read() 时,我都想返回mockModel。

最佳答案

Basically, I want to return mockModel whenever MavenXpp3Reader.read() is called, no matter what arguments are passed.

您可以在模拟记录中使用 Mockito.any() 但它不会编译,因为 MavenXpp3Reader.read() 已重载。
您应该指定与特定重载匹配的类:

when(mockReader.read(Mockito.any(Reader.class))).thenReturn(mockModel);

但在大多数情况下,您希望避免任何匹配器,因为这不够严格。


关于您的模拟录音:

when(mockReader.read(new FileReader("pom.xml"))).thenReturn(mockModel);

此处不会使用:

Model model = mockReader.read(new FileReader("pom.xml"));

因为指定 FileReader 参数的方式(没有软参数匹配器)使得 Mockito 依赖于类的 equals() 方法来考虑匹配并且 new FileReader("pom.xml").equals(new FileReader("pom.xml")) 返回 false,因为 FileReader 不会返回t 覆盖 equals()
但它会起作用:

FileReader reader = new FileReader("pom.xml")
when(mockReader.read(reader)).thenReturn(mockModel);
Model model = mockReader.read(reader);

关于java - 使用任何传递的参数模拟返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51938015/

相关文章:

java - 在 javax.json.spi.JsonProvider.provider(JsonProvider.java :97)) 找不到提供者 org.glassfish.json.JsonProviderImpl

java - 在没有最终参数声明的情况下将最终参数传递给另一个方法

c++ - Visual C++ 团队测试问题

java - Mockito:如何使用模拟函数的参数?

java - 如何模拟 FileInputStream 和其他 *Streams

java - 如何在 Spring Boot 中测试对外部 api 的调用

java - 关于 Intellij IDEA 与 scala 的问题

java - 如何在代号一中添加未选中的选项卡图标?

unit-testing - Scala、Scalatest 和 Maven 入门

c# - 无法添加封面 nuget 包 - 版本字符串部分太短或太长