인데? 코딩 말고 해야할 일이 꽤 많다. 최종 발표 영상도 준비해야하다보니 이 역시 피드백받고 수정하고 피드백 받고 수정하고 반복이다...
아무튼 오늘 테스트코드는 서비스 로직 이외에 다른 클래스도 구현해보기로 했다.
그 중에 Global Exception Handler
@DisplayName("Global Exception Handler 테스트")
@ExtendWith(MockitoExtension.class)
class GlobalExceptionHandlerTest {
@Mock
BindingResult bindingResult;
@InjectMocks
GlobalExceptionHandler globalExceptionHandler;
@DisplayName("CustomException 클래스에서 발생하는 예외 핸들러 테스트")
@Test
void handleCustomException() {
// Given
CustomException exception = new CustomException(INTERNAL_SERER_ERROR);
// When
ResponseEntity<ErrorResponse> response = globalExceptionHandler.handleCustomException(exception);
// Then
assertEquals(exception.getErrorCode().getHttpStatus(), response.getStatusCode());
}
}
이 클래스에서도 내가 원하는 예외를 하나 발생 시키고 핸들러를 통과하였을 때 나오는 반환값을 reponse로 받아서 둘을 검증하면 된다. 진짜 생각보다 매우 간단
@DisplayName("Valid 예외 핸들러 테스트")
@Test
void handleBindException() {
// Given
BindException bindException = new BindException(bindingResult);
String errorMessage = "Validation failed.";
when(bindingResult.getFieldErrors()).thenReturn(List.of(new FieldError("", "", errorMessage)));
// When
ResponseEntity<ErrorResponse> responseEntity = globalExceptionHandler.handleBindException(bindException);
// Then
assertEquals(HttpStatus.BAD_REQUEST, responseEntity.getStatusCode());
ErrorResponse errorResponse = responseEntity.getBody();
Assertions.assertNotNull(errorResponse);
assertEquals(errorMessage, errorResponse.getMessage());
}
Valid 예외 핸들러에서는 BindException이 필요해서 먼저 선언해주고 앞과 같이 when-thenReturn으로 원하는 값을 지정해줌
여기서 List.of의 사용법에 대해 알아보았다.
자바9 이후 버전에서 리스트를 만드는 방법이었다. 처음 아무것도 모르고 봤을땐 이게 뭔지, 왜 사용이 안되는지 궁금했는데 점차 아는 것이 많아지니 이런 것도 파악할 여유가 생긴다.
그리고 생각해보니 BindException은 한 번도 본 적이 없어서 어떤 경우에 생기는 예외인지 궁금해서 찾아보았다.
https://velog.io/@park2348190/Spring%EC%9D%98-Validation
흔히 만났던 Whitelabel Error Page가 나타났을 때 BindException이 터진거였나봄. 서버 소켓이 특정 포트에 바인딩을 시도할 때 해당 포트가 이미 다른 프로세스에 의해 사용중이거나 예약되어 있을 때 나타난다고 한다.
++ 최종영상 최최종 ~.~ 제출완룡 >.,<
'T.I.L. :: Today I Learned > 항해99 14기 본과정' 카테고리의 다른 글
Day 89. Final 최종 발표회까지 마친 하루 (0) | 2023.06.30 |
---|---|
Day 88. 최종 제출 완료...😭 (0) | 2023.06.29 |
Day 86. 테스트코드 쓰는 거 재밌당 ㅎㅋㅎㅋㅎ (0) | 2023.06.27 |
Day 85. 테스트코드가.. 눈에 보여..!👀 (0) | 2023.06.26 |
Day 84. 무한 리팩토링 + 테스트 코드 (0) | 2023.06.25 |