TIL(Today I Learned)
TIL-231013(테스트 실행 시 예외 메시지를 가져오지 않는 문제)
코코예원
2023. 10. 13. 22:30
728x90
📝오늘 공부한 것
- 실전프로젝트 - '행동대장' 테스트 코드 작성하기
- 커리어톤 참여하기
- 프로그래머스 문제 풀기
📌 Jacoco로 코드 커버리지 측정하기
⛔문제점
닉네임 변경에 대한 테스트코드를 작성했는데, 그중 이미 등록되어 있는 이메일로 이메일 변경을 했을 때의 실패코드를 작성하였다.
내가 기대하는 것은 "등록된 이메일이 있습니다"라는 메시지였는데, 테스트 코드를 실행했더니 null값이 나왔다.
[updateNickname메서드]
public CommonResponse updateNickname(UpdateNicknameRequestDto requestDto, User user) {
String newNickname = requestDto.nickname();
if(userRepository.findByNickname(newNickname).isPresent()){
throw new CommonException(DUPLICATE_NICKNAME);
}
user.updateNickname(newNickname);
userRepository.save(user);
return new CommonResponse(UPDATE_NICKNAME);
}
[실패 테스트코드]
@Test
@DisplayName("이메일 업데이트 - 실패")
void test2(){
//given
UpdateEmailRequestDto requestDto = new UpdateEmailRequestDto("coco@naver.com");
MyPageService myPageService = new MyPageService(userRepository, passwordEncoder);
User user = new User("코코","abcd1234","coco@naver.com",UserRoleEnum.USER);
//when
Exception exception = assertThrows(CommonException.class, ()->{
myPageService.updateEmail(requestDto, user);
});
//then
assertEquals("등록된 이메일이 있습니다.", exception.getMessage());
}
[결과]
💯해결
기존의 exception을 사용한 것이 아닌 custom exception을 사용하였다.
Jacoco가 예외메시지를 정확하게 가져오지 못해서, 예외 메시지가 null로 나타났다.
그래서, Jacoco가 예외 메시지를 정확하게 가져오도록 CommonException클래스를 수정하였다.
방법①
CommonException클래스 내에서 부모클래스인 RuntimeException의 getMessage() 메서드를 오버라이드하여 errorCode의 메시지를 반환하게 만들어 Jacoco가 예외 메시지를 가져올 수 있도록 하였다.
방법②
CommonException클래스를 수정하여, 예외 메시지를 직접 반환하여 Jacoco에서 예외메시지를 가져올 수 있도록 하였다.
728x90