테스트 코드에서 에러(InvaildRequestException)가 발생했을 때 HTTP 400(Bad Request)이 반환 되어야 하지만
테스트에서 200을 원하고 있어 발생하는 오류이다.
애초에 .isOk()를 통해 200 OK를 기대했다 → 잘못된 설정
.andExpect(status().isBadRequest())
.andExpect(jsonPath("$.status").value(HttpStatus.BAD_REQUEST.name()))
.andExpect(jsonPath("$.code").value(HttpStatus.BAD_REQUEST.value()))
내가 해결한 방식과 제일 비슷해보이는 방법을 찾았다.
그런데 더 좋아 보이는 방식을 발견
.andExpect(status().is4xxClientError())
.andExpect(jsonPath("$.status").value(HttpStatus.BAD_REQUEST.name()))
.andExpect(jsonPath("$.code").value(HttpStatus.BAD_REQUEST.value()))
is4xxClientError()
는 400번대 에러(예: 400, 404 등) 모두를 허용한다.
- 만약 예외 처리 정책이 바뀌어 404, 422 등 다른 4xx 코드가 나가더라도 테스트가 깨지지 않는다.
- 반면, 위 코드(isBadRequest())는 400만을 허용한다.
[Spring 공식 문서] 에서도 is4xxClientError() 와 같은 범용적인 사용을 권장한다.