代码之家  ›  专栏  ›  技术社区  ›  navig8tr

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

  •  2
  • navig8tr  · 技术社区  · 6 年前

    当试图模拟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 回复  |  直到 6 年前
        1
  •  1
  •   chmilevfa    6 年前

    尝试使用 any() 从Mockito框架而不是 (new FileReader("pom.xml"))

    import static org.mockito.ArgumentMatchers.any;
    
    ...
    when(mockReader.read(any(Reader.class)).thenReturn(mockModel);
    ...
    
        2
  •  3
  •   davidxxx    6 年前

    基本上,我想在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")) 回报 false 作为 不覆盖 等于() .
    但它会起作用的:

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