Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在spring引导中写入单元测试,但由于转换器类而出现错误_Java_Spring Boot_Unit Testing_Junit_Tdd - Fatal编程技术网

Java 在spring引导中写入单元测试,但由于转换器类而出现错误

Java 在spring引导中写入单元测试,但由于转换器类而出现错误,java,spring-boot,unit-testing,junit,tdd,Java,Spring Boot,Unit Testing,Junit,Tdd,我使用converter类,在单元测试中得到空指针异常错误。 但是我使用returnaccountdto而不是converter类 它在跑。 代码正在邮递员处运行。 请给我一些建议 @Test void store() { Date date = new Date(); Account accountMock = mock(Account.class); AccountDto accountDto = new AccountDto(); accountDto.se

我使用converter类,在单元测试中得到空指针异常错误。 但是我使用returnaccountdto而不是converter类 它在跑。 代码正在邮递员处运行。 请给我一些建议

@Test
void store() {
    Date date = new Date();
    Account accountMock = mock(Account.class);
    AccountDto accountDto = new AccountDto();
    accountDto.setId(randomUUID);
    accountDto.setName("Test-Name");
    accountDto.setSurname("Test-Lastname");
    accountDto.setEmail("Test-Email");
    accountDto.setBirth_date(date);
    accountDto.setPassword("Test-Email");
    accountDto.setStatus(OPEN);

    when(accountMock.getId())
       .thenReturn(String.valueOf(randomUUID));
    when(accountRepository.save(ArgumentMatchers.any(Account.class)))
       .thenReturn(accountMock);

    AccountDto result = accountService.store(accountDto);

    assertEquals(result.getName(), accountDto.getName());
    assertEquals(result.getId(), String.valueOf(randomUUID));
}
服务方法=>

@Transactional
public AccountDto store(AccountDto accountDto) {
    Account account = new Account();
    account.setName(accountDto.getName());
    account.setSurname(accountDto.getSurname());
    account.setEmail(accountDto.getEmail());
    account.setBirth_date(accountDto.getBirth_date());
    account.setPassword(accountDto.getPassword());
    account.setStatus(accountDto.getStatus());
    final Account accountDb = repository.save(account);
    accountDto.setId(accountDb.getId());

    return converter.convertFromEntity(accountDb);
}
转换器类=>

 /**
 * Converts Entity to DTO.
 *
 * @param entity domain entity
 * @return The DTO representation - the result of the converting function application on domain
 * entity.
 */
public final T convertFromEntity(final U entity) {
    return fromEntity.apply(entity);
}
错误=>

java.lang.NullPointerException
at com.kablanfatih.tddexample.converter.Converter.convertFromEntity(Converter.java:51)
at com.kablanfatih.tddexample.service.impl.AccountServiceImpl.store(AccountServiceImpl.java:42)
at com.kablanfatih.tddexample.service.impl.AccountServiceImplTest.store(AccountServiceImplTest.java:87)

我认为你有两个选择。首先,您可以模拟转换器类,然后正确初始化转换器并在测试中使用它。我更喜欢第一种解决方案,因为我可以在单元测试的上下文中更好地控制转换器的行为。

我在这里得到的是,您在编写代码之后编写测试,因此您在这个问题上有所收获

建议的解决方案应为模拟转换器类,并分别控制响应和测试转换器方法。这就是TDD的工作原理

    @Mock
    Converter converter;

    when(converter.yourMockedMthord).thenReturn(your_output);
您可以编写ConverterTest.java类来测试方法的行为

如何在转换器类中设置fromEntity?