개발/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 부분에 대해선 좀 더 학습해봐야 할 것 같다.