尽管我尝试模拟返回值,但在尝试模拟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
保持为空。基本上,无论传递什么参数,我都想在调用mockModel
时返回MavenXpp3Reader.read()
。
答案 0 :(得分:3)
基本上,我想每当MavenXpp3Reader.read()返回mockModel 不管传递什么参数都被调用。
您可以在模拟录音中使用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"))
返回{ {1}}和false
不会覆盖FileReader
。
但这会起作用:
equals()
答案 1 :(得分:1)
尝试从Mockito框架而不是any()
使用(new FileReader("pom.xml"))
例如:
import static org.mockito.ArgumentMatchers.any;
...
when(mockReader.read(any(Reader.class)).thenReturn(mockModel);
...