有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么单元测试中的“验证”在不同实例的情况下不返回“不同参数”错误?

让我们来看看这个例子:

@Test
@SneakyThrows
public void shouldSave(){
    //given
    String filename = "exampleName";
    String filenameWithExtension = "exampleName.jpg";
    InputStream inputStream = IOUtils.toInputStream("exampleInputStream", "UTF-8");

    //when
    storageImageRepository.save(filename, inputStream);

    //then
    verify(storageRepository).store(new StorageMetadata(filenameWithExtension), inputStream);
}

Verify在此处返回“不同参数”错误,这是预期的,因为StorageMetadata的新实例是在StorageImageRepository内创建的。save()方法调用storageRepository。store()。到目前为止一切都很好,我可以创建ArgumentCaptor,在验证中使用它,每个人都很高兴

但是,请看一看:

@Test
public void shouldGetMediaObject(){
    //given
    when(mediaObjectRepository.getMediaObject(new MediaObjectCriteria("1"))).thenReturn(pojoMediaObject);

    //when
    MediaObjectTO result = mainMediaObjectService.getMediaObject("1");

    //then
    verify(mediaObjectRepository).getMediaObject(new MediaObjectCriteria("1"));
}

这里有一个模拟的getMediaObject()存储库方法,当参数为ID为1的MediaObjectCriteria时,该方法返回预定义对象(pojoMediaObject)

现在,当我调用mainMediaObjectService时。getMediaObject(“1”),它创建MediaObjectCriteria的新实例,并在参数中传递id(在本例中也是1),并调用模拟存储库方法

问题是:为什么这项测试会通过?不应该验证返回“不同参数”错误吗?MediaObjectCritera有3个不同的实例。任何帮助都将不胜感激。谢谢


共 (1) 个答案

  1. # 1 楼答案

    嗯,那很快。原来MediaObjectCritera@Data注释(Lombok),它覆盖了equals方法

    感谢@chrylis的快速点评