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