📝오늘 공부한 것
- 실전프로젝트 - '행동대장' 테스트 코드 작성하기
- 커리어톤 참여하기
- 프로그래머스 문제 풀기
📌 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에서 예외메시지를 가져올 수 있도록 하였다.
'TIL(Today I Learned)' 카테고리의 다른 글
TIL-231016(인텔리제이 JUnit 한글 깨짐 문제) (0) | 2023.10.16 |
---|---|
TIL-231014(자바의정석 Chapter11 '컬렉션 프레임웍') (0) | 2023.10.14 |
TIL-231012(Jacoco로 코드 커버리지 측정(1)) (0) | 2023.10.12 |
TIL-231011(TDD) (0) | 2023.10.11 |
TIL-231010(자료구조 & 알고리즘 5주차) (0) | 2023.10.10 |