ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 부분에 대해선 좀 더 학습해봐야 할 것 같다.

    댓글

Designed by Tistory.