Резюме
Мы пытаемся смоделировать вызов БД с объектами Pageable & Slice, но макет не возвращает назначенное возвращаемое значение при вызове приложением.
Подробнее
У нас есть метод Pageable в нашем 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
EDIT
Чтобы убедиться, что проводка правильная, а общий конфиг работает нормально, я добавил в репозиторий еще один метод без разбивки на страницы, сменил его, и он работает нормально:
В тестовом классе:
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);