AssertJ
JUnit5에서도 AssertJ와 비슷하게 값 검증을 할 수 있는 Assertions
의 assert
메소드들을 제공한다. 그럼 이 둘 간 차이점이 무엇인지 아래 코드를 먼저 보자.
assertEquals(expected, actual);
assertThat(actual).isEqualTo(expected);
코드를 보면 알 수 있듯 AssertJ에서 제공하는 assertion의 가독성이 더 높다.
AssertJ의 장점을 좀 더 구체적으로 알아보면 다음과 같다.
1. 테스트를 할 때 필요한 거의 모든 메소드를 제공
2. 메소드 체이닝을 지원해서 더 짧고 간결하게 코드 작성 가능
AssertJ를 사용하려면 먼저 외부 의존성을 추가해주어야 한다.
해당 의존성은 maven repository 사이트에서 찾을 수 있다.
의존성을 추가한 후에는 메소드를 사용하기 위해 static method로 import해준다.
모든 assertions를 실행 후 실패 내역 일괄 확인
원하는 Exception이 발생하는지 검증
import static org.assertj.core.api.Assertions.*;
public class ExceptionSyntax {
@Test
@DisplayName("NullPoint 예외 처리")
void nullPoint() {
assertThatNullPointerException().isThrownBy(() -> {
throw new NullPointerException("null!");
}).withMessage("%s!", "null")
.withMessageContaining("nu")
.withNoCause();
}
@Test
@DisplayName("IllegalArgument 예외 처리")
void illegalArgs() {
assertThatIllegalArgumentException().isThrownBy(() -> {
throw new IllegalArgumentException("Illegal args!");
}).withMessage("%s!", "Illegal args")
.withMessageContaining("Il")
.withNoCause();
}
@Test
@DisplayName("IllegalState 예외 처리")
void illegalState() {
assertThatIllegalStateException().isThrownBy(() -> {
throw new IllegalStateException("Illegal state!");
}).withMessage("%s!", "Illegal state")
.withMessageContaining("Il")
.withNoCause();
}
@Test
@DisplayName("IO 예외 처리")
void io() {
assertThatIOException().isThrownBy(() -> {
throw new IOException("IO!");
}).withMessage("%s!", "IO")
.withMessageContaining("I")
.withNoCause();
}
}