본문 바로가기
TEST

Page 테스트 코드 작성하기

by YoonJong 2022. 12. 26.
728x90

프로젝트 중 "상품 전체 검색" service 레이어를 단위테스트 하는 과정에서 Page 에 대한 내용을 어떻게 mock 으로 주입해야하는지에 대해 알아보았다.

 

테스트할 서비스는 아래와 같다.

@Override
@Transactional(readOnly = true)
public List<GoodsResponse> goodsFindAll(Pageable pageable) {
    Page<Goods> goods = goodsRepository.findAll(pageable);
    List<GoodsResponse> list = new ArrayList<>();
    for (Goods good : goods) {
        list.add(GoodsResponse.toGoodsResponse(good));
    }
    return list;
}

 

JUnit5 와 mock 을 이용해서 테스트코드를 작성한 내용은 아래와 같다.

Page를 willReturn 으로 반환되는 값으로 변환시키기 위해서는 PageImpl 을 이용해야한다.

이유는 Page 는 인터페이스이기 때문에, 인터페이스의 구현체를 찾아 해결했다.

 

List<Goods> 를 이용해 ArrayList를 만들고, list에 넣고 싶은 goods 를 추가한다.

new PageImpl을 통해서 만들어진 goodsList 를 생성해 PageImpl 타입의 객체를 만들고 willReturn에 결과값으로 넣어주었다.

@Test
@DisplayName("상품 전체 조회")
void goodsFindAll() {
    //given
    Goods goods = GoodsFactory.createGoods();
    Pageable pageable = PageRequest.of(0, 10, Sort.Direction.DESC, "id");
    List<Goods> goodsList = new ArrayList<>();
    goodsList.add(goods);

    PageImpl<Goods> goodsPage = new PageImpl<>(goodsList);

    given(goodsRepository.findAll(pageable)).willReturn(goodsPage);

    //when
    List<GoodsResponse> goodsResponses = goodsService.goodsFindAll(pageable);

    //then
    assertThat(goodsResponses.size()).isEqualTo(1);
}

 

728x90

댓글