簡體   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