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

时间:2016-09-27 18:16:16

标签: java unit-testing junit mockito

让我们来看看这个例子:

@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);
}

验证返回“不同参数”错误,这是预期的,因为在StorageImageRepostiory.save()方法中创建了新的StorageMetadata实例以调用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()存储库方法,当参数是MediaObjectCriteria且ID为1时返回预定义对象(pojoMediaObject)。

现在,当我调用mainMediaObjectService.getMediaObject(“1”)时,它会创建MediaObjectCriteria的新实例,并在参数中传入id(在本例中也是1)并调用mocked repository方法。

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

1 个答案:

答案 0 :(得分:1)

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

感谢 @chrylis 快速发表评论。