为什么& # 39;验证# 39;在单元测试中不返回不同的参数'在不同实例的情况下出现错误



让我们看一下这个例子:

@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在这里返回"不同的参数"错误,这是预期的,因为在storageimagerepository .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()存储库方法,当参数是ID为1的MediaObjectCriteria时,它返回预定义的对象(pojmediaobject)。

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

问题是:为什么这个测试通过了?不应该验证返回"不同的参数"错误?mediaobjectcriterion有3个不同的实例。任何帮助都会很感激。谢谢。

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

感谢@chrylis的快速和现场的评论

相关内容

  • 没有找到相关文章

最新更新