-
junit5 에러 테스트개발/Spring 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 부분에 대해선 좀 더 학습해봐야 할 것 같다.
'개발 > Spring' 카테고리의 다른 글
@Transactional(readOnly = true)는 필요한가? (2) 2021.08.08 spring transaction (0) 2021.04.06 jpa또는 querydsl로 union 쿼리 사용 (5) 2021.02.25 RequestBody의 데이트 타입 정해진 format으로 받기 (0) 2021.02.24 jpa entity 기본 생성자(Default Constructor) 필요할때 (0) 2020.03.10 댓글