AssertJ로 예외 여부 테스트하기

저니·2023년 4월 3일
0
post-thumbnail

AssertJ에서 Exception을 검증하는 방법에 대해 알아보자.

예외가 발생하는 지 확인하기

코드

// Java 8 부터는 `assertThatThrownBy` 메서드로 예외 여부를 확인할 수 있다.
assertThatThrownBy(() -> 예외를_던지는_함수_호출()).isInstanceOf(XXXException.class);

// 또는 이렇게도 가능하다.
assertThatExceptionOfType(XXXException.class).isThrownBy(() -> 예외를_던지는_함수_호출())

BDD 방식으로 작성한 코드

만약 given - when - then 으로 작업을 나누는 BDD(Behavior Driven Development) 형식으로 코드를 작성하려면, catchThrowable 함수로 예외를 잡아서 검증할 수도 있다.

@Test
public void testException() {
   // given some preconditions

   // when
   Throwable thrown = catchThrowable(() -> 예외를_발생시키는_함수());

   // then
   assertThat(thrown).isInstanceOf(Exception.class)
                     .hasMessageContaining("boom"); // 에러 메시지에 해당 문자열이 포함되는 지 검사
}

그리고 자주 발생하는 예외의 경우엔 Exception별 메서드를 따로 제공하고 있다.

  • assertThatIllegalArgumentException()
  • assertThatIllegalStateException()
  • assertThatIOException()
  • assertThatNullPointerException()

예외가 발생하지 않는 지 확인하기

assertThatCode(() -> {
  // 코드를 작성한다.
  ...
}).doesNotThrowAnyException();

참고

AssertJ Core Feature

0개의 댓글