-
[Junit] Junit5 Exception Throw 테스트프로그래밍/Junit 2021. 12. 28. 00:24반응형
이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다.
틀리거나 잘못된 정보가 있을 수 있습니다.
댓글로 알려주시면 수정하도록 하겠습니다.
1. Junit4 Exception 테스트
많은 개발자 분들이 사용한 Junit4에서는 어떤 예외 상황에 대한 테스트를 진행하는 경우 @Test 어노테이션에 expected 속성에 발생을 원하는 Exception의 Class를 전달하는 경우 해당 Exception이 Throw 되면 테스트 성공으로 결과를 받아 볼 수 있었습니다.
2. Junit5 Exception 테스트 방법
Junit5인 jupiter.api Package의 @Test 어노테이션의 경우 expected 속성이 제거되어 더 이상 @Test 어노테이션을 통한 Exception Test가 불가능합니다.
Junit5에서는 Assertions의 assertThrows를 이용하여 Junit4와 동일하게 Exception을 테스트할 수 있습니다.
3. assertThrows 메소드
static <T extends Throwable>T assertThrows(Class<T> expectedType, Executable executable) static <T extends Throwable>T assertThrows(Class<T> expectedType, Executable executable, String message) static <T extends Throwable>T assertThrows(Class<T> expectedType, Executable executable, Supplier<String> messageSupplier)
assertThrows 메소드는 총 3개가 존재합니다.
AssertThrows Class
assertThrows 메소드를 살펴보면 2번째 인자로 Excutable을 인자로 받고 있으므로 Lamda를 이용하여 메소드를 이용하도록 하겠습니다.
Assertions.assertThrows(NullPointerException.class, () -> { //NullPointerException Throw하는 작업을 작성 });
assertThrows의 기본 사용법은 람다식 안에 Exception을 Throw 하는 작업을 수행하면 됩니다.
위 이미지처럼 NullPointException을 기대하고 List를 Null로 초기화 후 get 메소드를 실행하면 List 객체가 Null이기 때문에 NullPointException이 발생할 것입니다. 그래서 이번 테스트는 통과되게 됩니다.
또한 Throw Exception은 해당 Exception만 가능한 것이 아닌 상위(Super Class) 타입의 Exception 또한 가능합니다.
NullPointException의 상위 타입인 RuntimeException 또한 해당 테스트에서 Exception Throw로 테스트 진행 가능합니다.
즉 Throwable, Exception, RuntimeException 모두 Exception Throw 테스트 가능합니다.
Assertions.assertThrows(NullPointerException.class, () -> { //NullPointerException Throw하는 작업을 작성 }, "Exception이 발생하지 않았을 경우 출력 메시지");
이번에는 Throw 되길 원하는 Exception이 발생하지 않은 경우 테스트 Console에 원하는 메시지를 출력할 수 있도록 assertThrows 메소드 3번째 인자로 Message를 전달합니다.
NullPointException이 발생하지 않는다면 "예외가 발생하지 않았습니다."라는 메시지가 Console에 출력되도록 테스트 메소드를 작성하였습니다.
위 테스트를 진행하면 테스트는 실패로 종료되며 입력한 "예외가 발생하지 않았습니다."는 메시지와 함께 Console에 테스트 결과가 출력될 것입니다.
테스트 실행 결과 입력한 메시지가 출력되며 NullPointException이 Throw 되길 예상하였지만 아무것도 Throw 되지 않았다는 테스트 실패 결과가 Console창에 출력됩니다.
사용된 예제 코드는 Git에 있습니다.
반응형'프로그래밍 > Junit' 카테고리의 다른 글
[Junit] doReturn과 thenReturn (0) 2022.02.21 [Junit] Test Double Spy 상세 (1) 2022.02.14 [Junit] Mock과 MockBean (0) 2022.02.12 [Junit] Test Double (0) 2022.02.08