본문 바로가기
📕 Spring Framework/Spring Project

[이슈] Pageable test 관련 에러

by GroovyArea 2022. 11. 23.

💡문제

API Controller를 테스트 하는데 잘 성공하던 테스트가 계속 실패한다.

이런 에러 메시지가 계속 뜬다.

 

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: No primary or single unique constructor found for interface org.springframework.data.domain.Pageable

 

테스트 코드

mockMvc.perform(get("/api/v2/users")
                .param("page", String.valueOf(page)))
        .andExpect(status().isOk())
        .andExpect(content().string(JsonUtil.objectToString(pageOneUsers)))
        .andDo(print());

 

코드

/**
 * 회원 리스트 조회
 *
 * @return 회원 리스트
 */
@GetMapping
public ResponseEntity<List<ListResponseDto>> getAll(@PageableDefault(
        page = 1,
        sort = "createdAt",
        direction = Sort.Direction.DESC) Pageable pageable) {
    return ResponseEntity.ok(userService.getAllUsers(pageable));
}

 

뭐가 문제여.

 

 

😊 해결

mockmvc를 사용한 웹 요청에서는 테스트에 필요한 최소한의 환경을 생성하기 위해 

보통 standaloneMockMvcBuilder를 이용해 초기 설정을 하는데, 여기서 

.setCustomArgumentResolvers(new PageableHandlerMethodArgumentResolver())

 

이렇게 페이징 정보를 추출하여 Pageable 인스턴스를 컨트롤러 메서드에 주입해주는 설정을 추가로 해주면 해결된다.

 

하핫.

 

반응형