FindById Spring Data JPA не может быть вызван; исключение нулевого указателя - PullRequest
0 голосов
/ 02 августа 2020

Я проверяю случай при поиске идентификатора, которого нет в базе данных, возвращает null.

Но тестовый пример продолжает прерываться с помощью nullPointerException; Предполагается, что он возвращает значение null, и я предполагаю, что он это делает, но по какой-то причине мой тестовый пример не проходит его.

Тестовый пример

@Test
    public void testFindWrongComplaintDetailsById() {
        long id = 2;

        when(emergencyComplaintRepository.findById(id)).thenReturn(null);
        assertNull(emergencyComplaintService.findComplaintDetailsById(id));
    }

Сервис

@Override
    public EmergencyComplaint findComplaintDetailsById(long id) {
        return emergencyComplaintDAO.findById(id);
    }

DAO

@Override
    public EmergencyComplaint findById(long id) {
        return emergencyComplaintRepository.findById(id).orElse(null);
    }

Ошибка

Ответы [ 2 ]

2 голосов
/ 02 августа 2020

Это потому, что вы должны вернуть Optional<EmergencyComplaint> из метода вашего репозитория, этого и ожидает orElse.

Между прочим, использование этого метода для возврата null является полным злоупотреблением. Если вы хотите вернуть null, использование orElse не нужно, это плохая практика, и это, помимо всего прочего, вызывает у вас эти проблемы.

1 голос
/ 03 августа 2020

Вам необходимо вернуть Optional.empty() для emergencyComplaintRepository.findById(id), как показано ниже.

@Test
    public void testFindWrongComplaintDetailsById() {
        long id = 2;

        when(emergencyComplaintRepository.findById(id)).thenReturn(Optional.empty());
        assertNull(emergencyComplaintService.findComplaintDetailsById(id));
    }
...