繁体   English   中英

使用Mockito模拟具有Pageable和Slice接口的数据库调用时,出现NullPointerException

[英]NullPointerException when mocking a DB call with Pageable and Slice Interfaces with Mockito

摘要

我们正在尝试使用Pageable&Slice对象模拟对DB的调用,但是当应用程序调用时,模拟未返回分配的返回值。

详细介绍

我们在Spring-Data Repository有一个Pageable方法:

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{

但是,在服务类中,当运行单元测试时,以下slicenull

  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);

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

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

Intellij版本是:

2018.2.3 Ultimate Edition

Build #UI-182.4323.46

Built on Sep 3 2018

在某个时候它才开始起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM