본문 바로가기
개발 관련 학습 및 문제해결

백엔드 Pagination 테스트 코드 짜기(20221013 TIL)

by 날파리1 2022. 10. 13.

페이지네이션을 구현하는 과정에서 써보지 않던 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 에 대해선 다음에 알아보도록하자!

댓글