페이지네이션을 구현하는 과정에서 써보지 않던 Page라는 타입을 쓰게 되었다.
레포지토리에서 가져온 객체들을 보통 List<T> 으로 리턴해주었는데 findAll이라는 메소드를 쓰니 반드시 Page로 받아야 한다...
상황
public interface ProductRepository extends JpaRepository<Product, Long> {
Page<Product> findAll(Pageable pageable);
}
레포지토리에서 가져올 제품들을 Page로 받아준다.
public Page<Product> list(int page) {
Sort sort = Sort.by("createdAt").descending();
pageable = PageRequest.of(page - 1, 8, sort);
return productRepository.findAll(pageable);
}
문제의 테스트 코드
기존에는
given(productRepository.findAll()).willReturn(List.of(new Product...))
로 받아와
assertThat(products).hasSize(1);
같은 식으로 사이즈를 확인해주었다면
이제는 타입을 바꾸어주어야한다!
@BeforeEach
void setUp() {
productRepository = mock(ProductRepository.class);
productService = new ProductService(productRepository);
}
@Test
void list() {
Product product = mock(Product.class);
List<Product> products = new ArrayList<>();
products.add(product);
Page<Product> page = new PageImpl<>(products);
given(productRepository.findAll(pageable)).willReturn(page);
assertThat(products).hasSize(1);
assertThat(product.getId()).isNotNull();
}
PageImpl에 리스트를 담으면 리턴이 가능하다.
액션플랜
PageImpl 에 대해선 다음에 알아보도록하자!
'개발 관련 학습 및 문제해결' 카테고리의 다른 글
왜 스스로 해보지 않는가?[20221021-TIL] (0) | 2022.10.21 |
---|---|
php 언어의 특징과 장단점[20221018 TIL] (1) | 2022.10.18 |
react router dom 로그인 문제 해결[20221012 TIL] (0) | 2022.10.12 |
뭐든 테스트 코드 부터...[20221011 TIL] (0) | 2022.10.11 |
자바 스프링 페이지네이션 구현 풀스택[20221010 TIL] (0) | 2022.10.10 |
댓글