개발/Spring
junit5 에러 테스트
보리ing
2021. 3. 21. 13:28
예외를 기대하고 테스트를 할 때가 있다.
이런경우 예제를 찾아보니
1. @Test(expected = IllegalArgumentException.class)
@Test(expected = IllegalArgumentException.class)
와 같이 어노테이션을 통해 간단히 테스트를 할 수 있었지만, junit5 환경으로 작업해보면서 되지 않았다.
2. 두번째로는 try catch를 사용하여 테스트를 할 수 있었다.
try {
userRepository.findByIdAndIsDeleted(1l, false).orElseThrow(()-> new IllegalArgumentException("없는 사용자 id 입니다."));
}catch (IllegalArgumentException e){
System.out.println("에러 발생");
assertThat(e.getMessage()).isEqualTo("없는 사용자 id 입니다.");
}
3. @Rule에 ExpectedException 를 지정하고, 해당 예외 테스트
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test
@DisplayName("삭제 테스트")
@Transactional
void deleteUser() {
thrown.expect(IllegalArgumentException.class);
thrown.expectMessage("없는 사용자 id 입니다.");
userService.findUser(1l);
}
처럼 상단 @Rule 어노테이션에 기대 예외를 넣을 ExpectedException을 생성하고,
해당 테스트에서 각각의 예외와 메세지를 지정한 후 메서드를 실행시켜 확인 할 수 있다.
->이 부분도 예상과는 다르게 잘 되는 것 같지 않았다.
4. 클래스 내에서 메서드에 기대 예외 메서드를 만들고 실행메서드와 비교
IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () ->userService.findUser(1l));
assertEquals("없는 사용자 id 입니다.",exception.getMessage());
깔끔한 테스트 결과를 보고싶다면 2 혹은 4방법으로 테스트를 하면 될 것같다.
3 부분에 대해선 좀 더 학습해봐야 할 것 같다.