【问题标题】:Spring Data JPA's findById cannot be invoke; nullPointerExceptionSpring Data JPA 的 findById 不能被调用;空指针异常
【发布时间】:2020-08-02 19:39:33
【问题描述】:

我在搜索数据库中不存在的 id 时检查大小写返回 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);
    }

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

错误

【问题讨论】:

    标签: spring jpa spring-data-jpa spring-test


    【解决方案1】:

    那是因为您应该从存储库的方法中返回一个 Optional<EmergencyComplaint>,这就是 orElse 所期望的。

    顺便说一句,使用这种方法返回null是完全的误用。如果你想返回null,那么orElse的使用是不必要的,这是一种不好的做法,而且它会给你带来这个麻烦。

    【讨论】:

      【解决方案2】:

      您需要为emergencyComplaintRepository.findById(id)返回Optional.empty(),如下所示。

      @Test
          public void testFindWrongComplaintDetailsById() {
              long id = 2;
      
              when(emergencyComplaintRepository.findById(id)).thenReturn(Optional.empty());
              assertNull(emergencyComplaintService.findComplaintDetailsById(id));
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-03
        • 2018-12-31
        • 2012-09-30
        • 1970-01-01
        • 2014-06-11
        • 2023-04-10
        • 1970-01-01
        • 2020-01-07
        相关资源
        最近更新 更多