반응형
AssertJ는 무엇인가?
AssertJ
- assertion을 제공하는 자바 라이브러리
- 테스트 코드, 에러 메세지의 가독성을 높여줌
JUnit5에서도 AssertJ와 비슷하게 값 검증을 할 수 있는 Assertions의 assert메소드들을 제공한다. 그럼 이 둘 간 차이점이 무엇인지 아래 코드를 먼저 보자.
assertEquals(expected, actual);
assertThat(actual).isEqualTo(expected);
코드를 보면 알 수 있듯 AssertJ에서 제공하는 assertion의 가독성이 더 높다.
AssertJ의 장점을 좀 더 구체적으로 알아보면 다음과 같다.
1. 테스트를 할 때 필요한 거의 모든 메소드를 제공
2. 메소드 체이닝을 지원해서 더 짧고 간결하게 코드 작성 가능
사용 예시
의존성 추가
AssertJ를 사용하려면 먼저 외부 의존성을 추가해주어야 한다.
해당 의존성은 maven repository 사이트에서 찾을 수 있다.
import static method
의존성을 추가한 후에는 메소드를 사용하기 위해 static method로 import해준다.
Chaining Test - String
Chaining Test - Number
Error Message Description
Filtering assertions - Iterables or Array 적용
Extracting
리스트에서 특정 필드만 뽑아 테스트
여러 필드 뽑아 테스트 - Tuple 이용
Soft assertions
모든 assertions를 실행 후 실패 내역 일괄 확인
Exception 테스트
원하는 Exception이 발생하는지 검증
assertThat
assertThatThrownBy
자주 쓰이는 Exception Syntax
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();
}
}
Reference
반응형
'Spring' 카테고리의 다른 글
단위 테스트(Unit Test)가 뭐길래 (0) | 2023.02.10 |
---|---|
소프트웨어 테스트 종류 (0) | 2023.02.10 |
JUnit5 소개 (0) | 2023.02.10 |
QClass 사용법 (0) | 2023.02.10 |
QueryDsl 도메인 생성 (0) | 2023.02.10 |