Spring 无法调用数据 JPA 的 findById;空指针异常

Spring Data JPA's findById cannot be invoke; nullPointerException

我正在检查在搜索数据库中不存在的 ID 时的情况 returns 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);
    }

错误

那是因为您应该 return 来自存储库方法的 Optional<EmergencyComplaint>,这正是 orElse 所期望的。

顺便说一下,用这个方法来returnnull完全是误用。如果你想 return null,使用 orElse 是不必要的,这是一种不好的做法,而且它给你带来了最重要的麻烦。

您需要 return Optional.empty() for emergencyComplaintRepository.findById(id),如下所示。

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

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