Exception 테스트 방법(Junit5)

cotchan·2021년 7월 28일
0
  • 개인공부 목적으로 작성한 포스팅입니다.
  • 아래 출처를 참고하여 작성하였습니다.

1. assertThrows

  • JUnit5에서는 assertThrows를 통해 Exception을 검증할 수 있습니다.

  • assertThrows의 parameter로 인수 2개를 줍니다.

    • 예상하는 Exception Type
    • Executable interface(Exception을 테스트하고자하는 메서드 호출)
@Test
public void whenExceptionThrown_thenAssertionSucceeds() {
    Exception exception = assertThrows(NumberFormatException.class, () -> {
        Integer.parseInt("1a");
    });

    String expectedMessage = "For input string";
    String actualMessage = exception.getMessage();

    assertTrue(actualMessage.contains(expectedMessage));
}

2. 동작방식

  • assertThrows의 2번째 인수인 Executable interface method block에서 예상되는 Exception이 발생하면, assertThrows는 해당 Exception을 return value로 반환합니다.
  • 그러면 반환된 Exception의 message로 assert 검증을 적용할 수 있습니다.

3. 부모 Exception 사용가능

  • 중요한 점은 assertThrows의 첫 번째 인수로 부모 Exception을 넘겨줘도 됩니다.

  • 아래 샘플코드의 경우, 실제 호출되는 Exception은 NumberFormatException이지만, NumberFormatException의 상위 Exception인 RuntimeException을 첫 번째 인수로 사용해도 테스트는 성공합니다.

@Test
public void whenDerivedExceptionThrown_thenAssertionSucceds() {
    Exception exception = assertThrows(RuntimeException.class, () -> {
        Integer.parseInt("1a");
    });

    String expectedMessage = "For input string";
    String actualMessage = exception.getMessage();

    assertTrue(actualMessage.contains(expectedMessage));
}

profile
https://github.com/cotchan

0개의 댓글