[英]junit stream map Java 8
我有以下服务,我想测试它,但我无法使用该服务测试映射器
@Override
public Optional<List<ProviderDTO>> getAllProvider() {
return Optional.of(providerRepository.findAll().stream().map(providerMapper::toDto)
.collect(Collectors.toCollection(ArrayList::new)));
}
@Test
public void whenFindAll_thenReturnCustomerList() {
Provider provider = providerInit.buildProvider();
ProviderDTO providerDTO = providerInit.buildProviderDTO();
List<Provider> providerList = Arrays.asList(provider, provider, provider);
List<ProviderDTO> providerDTOList = Arrays.asList(providerDTO, providerDTO, providerDTO);
when(providerRepository.findAll()).thenReturn(providerList);
when(providerMapper.toDto(providerList)).thenReturn(providerDTOList); //error
Optional<List<ProviderDTO>> result = providerService.getAllProvider();
assertEquals(providerDTOList.size(), result.get().size());
}
您的映射器接受单个 Provider 实例并返回 DTO 表示。 您正在尝试传递整个列表。
为了简化您的测试,请使用单个对象,而不是整个集合。
@Test
public void whenFindAll_thenReturnCustomerList() {
Provider provider = providerInit.buildProvider();
ProviderDTO dto = providerInit.buildProviderDTO();
List<Provider> providerList = Collections.singletonList(provider);
when(providerRepository.findAll()).thenReturn(providerList);
when(providerMapper.toDto(any(Provider.class))).thenReturn(dto);
Optional<List<ProviderDTO>> result = providerService.getAllProvider();
assertEquals(1, result.get().size()); // check size
assertEquals(dto, result.get().get(0)); // check dto result
Mockito.verify(providerMapper).toDto(provider); //verify the mapper
}
建议:
至于getAllProvider()
方法,返回列表而不是 Optional 会更清晰。 如果您不希望 findAll() 返回空值,则将结果包装在 Optional 中毫无意义。 最终将返回空列表。
@Override
public List<ProviderDTO> getAllProvider() {
return providerRepository.findAll().stream().map(providerMapper::toDto)
.collect(Collectors.toList());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.