gpt4 book ai didi

java - Spring Boot 分页 - Mockito 存储库 findAll(Pageable) 返回 null

转载 作者:行者123 更新时间:2023-11-29 08:23:28 25 4
gpt4 key购买 nike

我正在尝试编写一个简单的 API 来检索分页数据。我的程序在未分页时运行并“找到所有”。但是,当我从模拟存储库 (Mockito) 调用 findAll(Pageable) 时,它返回 null。

任务服务.java

import com.example.task.dto.TaskResponse;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;

public interface TaskService {
Page<TaskResponse> findAll(Pageable pageRequest);
}

TaskServiceImpl.java

import com.example.task.domain.TaskEntity;
import com.example.task.dto.TaskResponse;
import com.example.task.repository.TaskRepository;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;

public class TaskServiceImpl implements TaskService {
private TasksRepository tasksRepository;

public TaskServiceImpl(TasksRepository tasksRepository) {
this.tasksRepository = tasksRepository;
}

@Override
public Page<TaskResponse> findAll(Pageable pageRequest) {
Page<TaskEntity> tasks = this.taskRepository.findAll(pageRequest); <=== HERE IT RETURNS NULL

return tasks;
}

任务库.java

package com.example.task.repository;

import com.example.task.domain.TaskEntity;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface TaskRepository extends JpaRepository<TaskEntity, Long>, PagingAndSortingRepository<TaskEntity, Long> {
Page<TaskEntity> findAll(Pageable pageRequest);
}

任务服务测试.java

package com.example.task.service;

import com.example.task.domain.TaskEntity;
import com.example.task.repository.TaskRepository;
import org.junit.jupiter.api.Test;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.mockito.Mockito.*;

class TaskServiceTest {
private TaskRepository taskRepository = mock(TaskRepository.class);
private TaskServiceImpl taskService = new TaskServiceImpl(taskRepository);

@Test
void FindAll_ReturnsAPagedListOfTasks() {
when(taskRepository.findAll()).thenReturn(Arrays.asList(
new TaskEntity(1L, "Fake task 1"),
new TaskEntity(2L, "Fake task 2"),
new TaskEntity(3L, "Fake task 3"),
new TaskEntity(4L, "Fake task 4")
));

Pageable pageRequest = PageRequest.of(0, 4);
List<TaskResponse> tasks = taskService.findAll(pageRequest).getContent();

assertThat(tasks.size(), equalTo(4));

verify(taskRepository).findAll();
}
}

在 TaskServiceImpl.java 中,.findAll(pageRequest) 返回 null。我对 Mockito 不是很熟悉,想知道用它创建模拟存储库是否会导致问题?当我在没有分页的情况下执行 .findAll() 时,它工作得很好。我使用 PagingAndSortingRepository 中的 findAll(Pageable) 方法有什么问题吗?谢谢!

最佳答案

您可以通过两种方式解决这个问题。

使用模拟:

Page<TaskEntity> tasks = Mockito.mock(Page.class);
Mockito.when(this.taskRepository.findAll(org.mockito.Matchers.isA(Pageable.class))).thenReturn(tasks);

或者,使用类实例化:

List<TaskEntity> tasks = new ArrayList<>();
Page<TaskEntity> pagedTasks = new PageImpl(tasks);
Mockito.when(this.taskRepository.findAll(pagedTasks)).thenReturn(pagedTasks);

关于java - Spring Boot 分页 - Mockito 存储库 findAll(Pageable) 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55448188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com