티스토리 뷰
AssertJ를 추가적으로 정리해보려고 한다.
맨 아래 AssertJ docs와 테스트 주도 개발 시작하기 책을 참고해서 작성하였다.
AssertJ vs. JUnit 글에서 보완할 부분을 먼저 짚고 넘어가자.
2022.01.26 - [Computer Science/TDD] - AssertJ vs. JUnit
친절한 AssertJ
AssertJ는 JUnit보다 테스트 실패 메시지가 친절하다.
먼저 JUnit 코드를 살펴보자.
assertTrue(list.contains("a"));
이 테스트에 실패한다면 다음과 같은 실패 메시지가 표시된다.
org.opentest4j.AssertionFailedError: expected: <true> but was: <false>
위 실패 메시지는 실패했다는 사실만 보여준다.
다음은 AssertJ 코드를 살펴보자.
assertThat(list).contains("a");
이 테스트에 실패한다면 다음과 같은 실패 메시지가 표시된다.
java.lang.AssertionError:
Expecting:
<"bcd">
to contain:
<"a">
에러 메시지를 보면 “bcd”가 “a”를 포함할 거라고 기대하지만 그렇지 않다는 것을 알 수 있다.
이처럼 보다 친절한 테스트 실패 메시지를 통해서 테스트 코드를 보다 편리하게 짤 수 있다.
AssertJ 기본 검증 메서드
다음 메서드는 같은지 검증하는 메서드다.
- isEqualTo(값) : 값과 같은지 검증한다.
- isNotEqualTo(값) : 값과 같지 않은지 검증한다.
- isNull() : null인지 검증한다.
- isNotNull() : null인 아닌지 검증한다.
- isIn(값 목록) : 값 목록에 포함되어 있는지 검증한다.
- isNotIn(값 목록) : 값 목록에 포함되어 있지 않은지 검증한다.
isIn과 isNotIn의 값 목록은 가변 인자로 주거나 List와 타입을 이용해서 전달한다.
다음 메서드는 대소 비교를 검증하는 메서드다.
- isLessThan(값) : 값보다 작은지 검증한다.
- isLessThanOrEqualTo(값) : 값보다 작거나 같은지 검증한다.
- isGreaterThan(값) : 값보다 큰지 검증한다.
- isGreaterThanOrEqualTo(값) : 값보다 크거나 같은지 검증한다.
- isBetween(값1, 값2) : 값1과 값2 사이에 포함되는지 검증한다.
다음 메서드는 boolean, Boolean 타입을 위한 검증 메서드다.
- isTrue() : 값이 true인지 검증한다.
- isFalse() : 값이 false인지 검증한다.
String에 대한 추가 검증 메서드
다음 메서드는 포함 여부를 검사하는 메서드이다.
- contains(CharSequence... values) : 인자로 지정한 문자열들을 모두 포함하고 있는지 검증한다.
- containsOnlyOnce(CharSequence sequence) : 해당 문자열을 딱 한 번만 포함하는지 검증한다.
- containsOnlyDigits() : 숫자만 포함하는지 검증한다.
- containsWhitespaces() : 공백 문자를 포함하는지 검증한다.
- containsOnlyWhitespaces() : 공백 문자만 포함하는지 검증한다.
- containsPattern(CharSequence regex) :지정한 정규 표현식에 일치하는 문자를 포함하는지 검증한다.
- containsPattern(Pattern pattern) :지정한 정규 표현식에 일치하는 문자를 포함하는지 검증한다.
- doesNotContain(CharSequence... values) : 인자로 지정한 문자열들을 모두 포함하고 있지 않은지 검증한다.
- doesNotContainAnyWhitespaces() : 공백 문자를 포함하고 있지 않은지를 검증한다.
- doesNotContainOnlyWhitespaces() : 공백 문자만 포함하고 있지 않은지를 검증한다.
- doesNotContainPattern(Pattern pattern) : 정규 표현식에 일치하는 문자를 포함하고 있지 않은지를 검증한다.
- doesNotContainPattern(CharSequence pattern) : 정규 표현식에 일치하는 문자를 포함하고 있지 않은지를 검증한다.
특정 문자열로 시작하거나 끝나는지 검증할 때 사용하는 메서드이다.
- startsWith(CharSequence prefix) : 지정한 문자열로 시작하는지를 검증한다.
- doesNotStartWith(CharSequence prefix) : 지정한 문자열로 시작하지 않는지를 검증한다.
- endsWith(CharSequence suffix) : 지정한 문자열로 끝나는지를 검증한다.
- doesNotEndWith(CharSequence suffix) : 지정한 문자열로 끝나지 않는지를 검증한다.
익셉션 관련 검증 메서드
보통 assertThatThrownBy()를 사용한다.
람다 표현식을 사용해서 익셉션이 발생하는지 검증한다.
@DisplayName("특정 위치의 문자를 가져올 때 위치 값(index)을 벗어나면 StringIndexOutOfBoundsException이 발생하는지에 대한 테스트")
@Test
void exception_charAt_test() {
// given
StringTdd stringTdd = new StringTdd();
String input = "abc";
int index = 4;
// when
// then
Assertions.assertThatThrownBy(
() -> {
stringTdd.charAt(input, index);
}
)
.isInstanceOf(StringIndexOutOfBoundsException.class)
.hasMessageContaining("index [%d]는 벗어난 인덱스입니다.", index);
}
발생한 익셉션의 타입을 추가로 검증하려면 isInstanceOf() 메서드를 사용한다.
as()와 describedAs()
위 두 개의 메서드는 테스트 코드의 설명을 추가할 때 사용한다.
Reference
테스트 주도 개발 시작하기 Test-Driven Development
AssertJ - fluent assertions java library
'개발 방식 연구 > TDD' 카테고리의 다른 글
TDD 스터디 1주차 요약 (0) | 2022.05.07 |
---|---|
TDD 관련 글 정리 (0) | 2022.02.13 |
AssertJ vs. JUnit (0) | 2022.01.26 |
TDD [3] (0) | 2022.01.25 |
TDD [2] (0) | 2022.01.25 |
- Total
- Today
- Yesterday
- BAEKJOON
- 이펙티브 자바
- 클린 코드
- 알고리즘
- kkoon9
- AWS
- 정규표현식
- 디자인패턴
- JPA
- 백준
- Java
- kotest
- Effective Java
- Olympiad
- 이팩티브 자바
- 테라폼
- Kotlin
- 디자인 패턴
- 프로그래머스
- Algorithm
- programmers
- 객체지향
- C++
- 클린 아키텍처
- 코테
- node.js
- MSA
- Spring Boot
- BOJ
- Spring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |