代码之家  ›  专栏  ›  技术社区  ›  riorio

当使用Mockito的Pageable和Slice接口模拟DB调用时出现NullPointerException

  •  0
  • riorio  · 技术社区  · 7 年前

    总结

    详细地

    我们的系统中有一个可分页的方法 Spring-Data Repository

    public interface CatRepository extends CouchbasePagingAndSortingRepository<Cat, String> {
    
      Slice<Cat> findAllByOwnerIdAndName(String ownerId, String name, Pageable pageable);
    

    自从 Slice 是一个接口,我们创建了一个 MockSlice 实现其方法的类:

    @Builder
    @Data
    public class MockSlice implements Slice{
    ...
    

    在创建 Mockito 测试此调用我们编写了以下代码:

     Slice<Cat> slice = MockSlice.builder().content(new LinkedList()).build();
      when(catRepository.findAllByOwnerIdAndname(anyString(), anyString(), any(Pageable.class))).thenReturn(slice);
    

    测试类具有以下注释:

    @RunWith(MockitoJUnitRunner.class)
    @SpringBootTest
    public class GetCatsTest{
    

    slice null :

      Pageable pageable = PageRequest.of(pageNumber, 1000, Sort.by("id"));
      Slice<Cat> slice = catRepository.findAllByOwnerIdAndName("23423", "Oscar", pageable);
      catList = slice.getContent();  <-- NullpointetException here
    

    编辑

    为了确保接线正确,并且整个conf工作正常,我向存储库添加了另一个不可分页的方法,对其进行了模拟,它工作正常:

    在测试班:

    LinkedList<Cat> list = new LinkedList<>();
    list.add(new Cat("fasdfasf", "Oscar"));
    when(catRepository.findAllByOwnerIdAndName(anyString(), anyString())).thenReturn(list);
    

    在存储库界面中:

    List<Cat> findAllByOwnerIdAndName(String ownerId, String name);
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   riorio    7 年前

    在这个问题上花了几个小时之后。。。。

    问题出在 Intellij 而不是在代码中。

    Intellij版本为:

    2018.2.3 Ultimate Edition
    
    Build #UI-182.4323.46
    
    Built on Sep 3 2018
    

    在某个时候,它刚刚开始工作。。。。