![](/img/trans.png)
[英]NullPointerException in Mockito when mocking method with primitive argument
[英]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{
但是,在服務類中,當運行單元測試時,以下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);
在這個問題上花了幾個小時后...。
問題出在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.