繁体   English   中英

junit 流映射 Java 8

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM