AssertJ
에서 Exception
을 검증하는 방법에 대해 알아보자.
// Java 8 부터는 `assertThatThrownBy` 메서드로 예외 여부를 확인할 수 있다.
assertThatThrownBy(() -> 예외를_던지는_함수_호출()).isInstanceOf(XXXException.class);
// 또는 이렇게도 가능하다.
assertThatExceptionOfType(XXXException.class).isThrownBy(() -> 예외를_던지는_함수_호출())
만약 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();