💡문제
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 인스턴스를 컨트롤러 메서드에 주입해주는 설정을 추가로 해주면 해결된다.
반응형
'📕 Spring Framework > Spring Project' 카테고리의 다른 글
OutBox Pattern 을 활용한 메일 전송 서비스 개발 [At Least Once] (0) | 2023.04.20 |
---|---|
[리팩토링] 도메인 모델 중심 Clean Architecture 로의 리팩토링 (0) | 2022.12.12 |
[Refactor] 패키지 구조와 의존성 (2) | 2022.10.14 |
[Redisson] 트랜잭션 문제 발생 및 해결 (0) | 2022.10.01 |
[Redisson]을 이용한 분산 Lock 구현 & 동시성 문제 해결 (2) | 2022.09.27 |