模拟任何返回的参数返回

时间:2018-08-20 20:23:59

标签: 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保持为空。基本上,无论传递什么参数,我都想在调用mockModel时返回MavenXpp3Reader.read()

2 个答案:

答案 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);
...