Напишите модульный тест при весенней загрузке, но получите ошибку из-за класса конвертера - PullRequest
0 голосов
/ 03 марта 2020

Я использую класс конвертера, я получаю ошибку исключения нулевого указателя в модульном тесте. Но я использую return accountDto вместо класса конвертера, который работает. Код работает на Почтальоне. Пожалуйста, дайте мне несколько советов.

@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)

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Я получаю здесь то, что вы пишете тесты после написания кода, поэтому вы попали в эту проблему.

Рекомендованным решением должен быть класс преобразователя-насмешника и управление методом преобразования ответа и теста по отдельности. Вот как работает TDD.

    @Mock
    Converter converter;

    when(converter.yourMockedMthord).thenReturn(your_output);

И вы можете написать ConverterTest.java класс для проверки поведения метода.

0 голосов
/ 12 марта 2020

У вас есть два варианта, на мой взгляд. Во-первых, вы можете издеваться над вашим классом Converter или, во-вторых, правильно инициализировать ваш конвертер и использовать его в своем тесте. Я предпочитаю первое решение, потому что я могу лучше контролировать поведение конвертера в контексте вашего модульного теста.

...