윤개발
AssertJ 본문
AssertJ란?
Assertj는 많은 Assertion, 오류 메시지 테스트를 제공하고
테스트 코드 가독성을 향상 시키며 쉽게 사용할 수 있도록 설계된 Java 라이브러리입니다.
의존성 추가
Assertj를 사용하기 위해선 의존성을 추가해주어야 합니다.
- maven dependency
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<!-- use 2.9.1 for Java 7 projects -->
<version>3.20.2</version>
<scope>test</scope>
</dependency>
(자바 7 은 2.9.1을 사용하라고 명시되어있습니다.)
- gradle dependency 추가
testImplementation "org.assertj:assertj-core:3.20.2"
항상 Java 버전을 확인하고 사용해주세요!
- AssertJ Core 3.x requires Java 8 or higher
- AssertJ Core 2.x requires Java 7 or higher
- 안드로이드는 공식적으로 지원하지 않는다고 합니다.
의존성 추가 후 아래 import를 통해 모든 라이브러리를 사용할 수 있습니다.
import static org.assertj.core.api.Assertions.*;
간단한 예제
@Test
void a_few_simple_assertions(){
assertThat("The Lord of the Rings").isNotNull()
.startsWith("The")
.contains("Lord")
.endsWith("Rings");
}
코드를 쭉 읽어보아도 무슨 의미인지 알수 있을정도로 테스트의 가독성이 좋아지는 것을 볼 수 있습니다.
Supported type assertions
AssertJ는 Java의 거의 모든 타입을 다 지원하는듯 보입니다.
BigDecimal | BigInteger |
CharSequence | Class |
Date | File |
Future / CompletableFuture | InputStream |
Iterable (including any kind of Collection) | Iterator |
List | Map |
Object | Object[] and Object[][] |
|
Path |
Predicate | Stream |
String | Throwable / Exception |
Primitive types and their wrapper:
|
Primitive type arrays:
|
Primitive type 2D arrays:
|
Instant | LocalDate |
LocalDateTime | LocalTime |
OffsetDateTime | OffsetTime |
ZonedDateTime | Period |
Assertion description
as를 붙혀서 간단하게 사용할 수 있습니다. 테스트가 Fail일 때 아래와 같이 볼 수 있습니다.
@Test
void describe(){
Person person = new Person(20, "Yoon");
assertThat(person.getAge()).as("check %s's age", person.getAge())
.isEqualTo(30);
}
테스트 결과
또한 withFailErrorMessage()를 사용해 다음과 같이 나타낼 수도 있습니다.
@Test
void failMessage(){
Person person = new Person(20, "Yoon");
assertThat(person.getAge()).withFailMessage("check %s's age", person.getAge())
.isEqualTo(30);
}
테스트 결과
주의해야할 사용법
assertJ를 사용할때 꼭 알아야할 유의해야할 점이 있습니다.
@Test
void badAssert(){
Person person = new Person(20, "Yoon");
assertThat(person.equals(null));
}
이와 같은 테스트는 어떤 결과를 반환할까요?
AssertJ의 사용법을 모르고 다음과 같이 했다면 테스트과 통과됩니다.
올바른 방법은 아래와 같습니다.
@Test
void goodAssert(){
Person person = new Person(20, "Yoon");
assertThat(person).isEqualTo(person);
//or
assertThat(person.equals(person)).isTrue();
}
assertj에는 굉장히 많은 메소드들이 있으며 활용범위가 넓습니다.
아래 출처를 쭉 한번 읽어보시고 필요할때 찾아 쓰시면 될 것 같습니다.
출처 : https://assertj.github.io/doc/#common-types
'테스트' 카테고리의 다른 글
TDD - 테스트 주도 개발 by 켄트 백 (0) | 2021.07.02 |
---|---|
Test Doubles(테스트 더블) — Dummy, Fakes, Mocks, Spy and Stubs (0) | 2021.07.02 |
JUnit 5 테스트란 무엇이며 어떻게 사용할까? (0) | 2021.06.02 |
Comments