JUnit이 검증을 위해 api를 제공하지만 직관적인 표현이 부족하여 해당 검증을 바로 이해하기 쉽지 않다. 그리고 테스트 실패시 출력에서도 AssertJ를 이용할 경우 기대값과 실제값을 출력해주어 테스트 결과를 구체적으로 알 수 있다.
import static org.assertj.core.api.Assertions.*;
import를 추가해주자.
asserThat(실제값).검증메서드(기댓값)
과 같은 형식을 사용한다.
아래는 메서드들의 종류이다.
메서드 | 설명 |
---|---|
isEqualTo(값) | 값이 같은지 검증 |
isNotEqualTo(값) | 값이 같지 않은지 검증 |
isNull() | Null인지 검증 |
isNotNull() | Null이 아닌지 검증 |
isIn(값목록) | 목록에 포함되어 있는지 검증 |
isNotIn(값목록) | 목록에 포함되어 있지 않은지 검증 |
값목록은 Iterable을 구현한 타입
메서드 | 설명 |
---|---|
isLessThan(값) | 값보다 작은지 검증 |
isLessThanOrEqualTo(값) | 값보다 작거나 같은지 검증 |
isGreaterThan(값) | 값보다 큰지 검증 |
isGreaterThanOrEqualTo(값) | 값보다 크거나 같은지 검증 |
isBetween(값1, 값2) | 값1과 값2사이에 포함되는지 검증 |
메서드 | 설명 |
---|---|
isTrue() | 값이 true인지 검증 |
isFalse() | 값이 false인지 검증 |
특정 값을 포함하는지 검사
메서드 | 설명 |
---|---|
contains(CharSequence...values) | 인자로 지정한 문자열들을 모두 포함하고 있는지 검증 |
containsOnlyOnce(CharSequence sequence) | 해당 문자열을 딱 한 번만 포함하는지 검증 |
containsOnlyDigits() | 숫자만 포함하는지 검증 |
containsWhitespaces() | 공백 문자를 포함하고 있는지 검증 |
containsOnlyWhitespaces() | 공백 문자만 포함하는지 검증 |
containsPattern(CharSequence regex) | 지정한 정규 표현식에 일치하는 문자를 포함하는지 검증 |
containsPattern(Pattern pattern) | 지정한 정규 표현식에 일치하는 문자를 포함하는지 검증 |
특정 값을 포함하지 않는지 검사
메서드 | 설명 |
---|---|
doesNotContain(CharSequence...values) | 인자로 지정한 문자열들을 포함하지 않는지 검증 |
doseNotContainAnyWhitespaces() | 공백 문자를 포함하고 있지 않은지 검증 |
doesNotContainOnlyWhitespaces() | 공백 문자만 포함하고 있지 않은지 검증 |
doesNotContainPattern(Pattern pattern) | 정규표현식에 일치하는 문자를 포함하지 않은지 검증 |
doesNotContainPattern(CharSequence pattern) | 정규 표현식에 일치하는 문자를 포함하고 있지 않은지 검증 |
특정문자열로 시작하거나 끝나는지 검사
메서드 | 설명 |
---|---|
startsWith(charSequence prefix) | 지정한 문자열로 시작하는지를 검증 |
doesNotStartsWith(charSequence prefix) | 지정한 문자열로 시작하지 않는지 검증 |
endsWith(charSequence suffix) | 지정한 문자열로 끝나는지를 검증 |
doesNotEndsWith(charSequence suffix) | 지정한 문자열로 끝나는지 않는지 검증 |
메서드 | 설명 |
---|---|
isZero()/isNotZero() | 0인지 아닌지를 검증 |
isOne() | 1인지 검증 |
isPositive() / isNotPositive() | 양수인지 아닌지 검증 |
isNegative() / isNotNegative() | 음수인지 아닌지 검증 |
LocalDateTime에만 사용하는 검증
메서드 | 설명 |
---|---|
ifAfter(시간값) | 특정 시간값 이후인지 검증 |
ifBefore(비교 값) | 비교값보다 이전인지 검증 |
ifBeforeOrEqualTo(비교 값) | 비교값보다 이전인지 같은지 검증 |
ifAfter(비교 값) | 비교값 이후인지 검증 |
ifAfterOrEqualTo(비교 값) | 비교값 이후인지 같은지 검증 |
다른 날짜타입들 포함 사용가능한 검증
|메서드|설명|
|:--:|:--:|
|isEqualToIgnoringNanos(비교 값)|초단위까지 값이 같은지 검증|
|isEqualToIgnoringSeconds(비교 값)|분단위까지 값이 같은지 검증|
|isEqualToIgnoringMinutes(비교 값)|시단위까지 값이 같은지 검증|
|isEqualToIgnoringHours(비교 값)|일단위까지 값이 같은지 검증|
공통
메서드 | 설명 |
---|---|
hasSize(int n) | 사이즈가 n과 같은지 검증 |
contains(E...values) | 지정한 값을 포함하는지 검증 |
containsOnly(E...values) | 지정한 값만을 포함하는지 검증 |
containsAnyOf(E...values) | 지정한 값 중 일부를 포함하는지 검증 |
containsOnlyOnce(E...values) | 지정한 값을 한 번만 포함하는지 검증 |
Map
메서드 | 설명 |
---|---|
containsKey(K key) | key를 포함하는지 검증 |
containsKey(K keys) | 키 목록을 포함하는지 검증 |
containsOnlyKey(K key) | 지정한 key만 포함하는지 검증 |
doseNotContainsKey(K keys) | 지정한 키들을 포함하지 않는지 검증 |
containsValues(VAULE... values) | values를 포함하는지 검증 |
contains(Entry<K,V>...values) | Entry<K,V>를 포함하는지 검증 |
예외관련은 아래와 같은 형태로 작성할 수 있다
assertThatThrownBy(() -> 실행문)
assertThatThrownBy(() -> 실행문).isInstanceOf(익셉션.class);
assertThatExceptionOfType(익셉션.class).isThrownBy(() -> 실행문);
assertThat[특정입센션명].isThrownBy(() -> 실행문); //ex) IOExcption
//아래는 익셉션이 발생하지 않는 경우를 검증
assertThatCode(() -> 실행문).doseNotThrowAnyException();
org.assertj.core.api.SoftAssertions를 이용하여 진행할 수 있다.
//방법1
SoftAssertions soft = new SoftAssertions();
soft.assertThat(1).isBetween(0, 2);
soft.assertThat(1).isBetween(2, 5);
soft.assertAll();
//방법2
SoftAssertions.assertSoftly(soft -> {
soft.assertThat(1).isBetween(0, 2);
soft.assertThat(1).isBetween(2, 5);
});
사용법은 위와 같다.