【发布时间】:2021-09-10 12:31:10
【问题描述】:
我正在为我的服务类编写一些单元测试,具体来说,就是一个更新方法,它使用请求中的给定数据更新实体。
问题是,我正在使用 ModelMapper 将请求数据映射到实体,当测试通过映射语句时,它实际上并没有调用 modelMapper 而是模拟 .... 它什么也不做,因为它是模拟。
我应该如何模拟它的行为?
public EntityNode updateEntity(String code, EntityDTO request) {
String message = "Entity with code: %s not found";
EntityNode entity = repository.findByCode(code)
.orElseThrow(() -> new EntityNotFoundException(String.format(message, code)));
modelMapper.map(request, entity);
return repository.save(entity);
}
我曾考虑过使用 ArgumentCaptor,但我不确定它是否适合我的需求,或者它是否真的是我需要做的事情。
这是我未完成的测试方法。写完所有这些后,我认为我应该以某种方式存根 ModelMappers.map(),并在调用 repository.save(entity) 时返回调用 ModelMapper 存根 map() 方法的结果。
@Test
void givenValidEntity_whenUpdateEntity_shouldUpdateProperties() {
//given
String code = "TEST";
Entity expected = new Entity();
expected.setName("Old");
EntityDTO request = new EntityDTO();
request.setName("New")
given(repository.findByCode(code)).willReturn(expected);
//when
Entity updatedEntity = service.updateEntity(code, request);
//then
assertEquals(request.getName(), updatedEntity.getName());
}
这有意义吗?
谢谢
【问题讨论】:
标签: java spring spring-boot unit-testing testing