AssertJ

kwang·2022년 8월 7일
0

TDD

목록 보기
4/4
post-custom-banner

AssertJ

JUnit이 검증을 위해 api를 제공하지만 직관적인 표현이 부족하여 해당 검증을 바로 이해하기 쉽지 않다. 그리고 테스트 실패시 출력에서도 AssertJ를 이용할 경우 기대값과 실제값을 출력해주어 테스트 결과를 구체적으로 알 수 있다.

import static org.assertj.core.api.Assertions.*;
import를 추가해주자.

공통 사용 방법

asserThat(실제값).검증메서드(기댓값) 과 같은 형식을 사용한다.
아래는 메서드들의 종류이다.

메서드설명
isEqualTo(값)값이 같은지 검증
isNotEqualTo(값)값이 같지 않은지 검증
isNull()Null인지 검증
isNotNull()Null이 아닌지 검증
isIn(값목록)목록에 포함되어 있는지 검증
isNotIn(값목록)목록에 포함되어 있지 않은지 검증

값목록은 Iterable을 구현한 타입

자료형에 따른 사용 방법

Comparable을 구현한 타입, 숫자 타입

메서드설명
isLessThan(값)값보다 작은지 검증
isLessThanOrEqualTo(값)값보다 작거나 같은지 검증
isGreaterThan(값)값보다 큰지 검증
isGreaterThanOrEqualTo(값)값보다 크거나 같은지 검증
isBetween(값1, 값2)값1과 값2사이에 포함되는지 검증

boolean 타입

메서드설명
isTrue()값이 true인지 검증
isFalse()값이 false인지 검증

String 타입

특정 값을 포함하는지 검사

메서드설명
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);
});

사용법은 위와 같다.

post-custom-banner

0개의 댓글