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