윤개발

AssertJ 본문

테스트

AssertJ

DEV_SJ 2021. 7. 1. 21:55

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[][]
  • Optional
  • OptionalInt / OptionalLong / OptionalDouble
Path
Predicate Stream
String Throwable / Exception
Primitive types and their wrapper:
  • short / Short
  • int / Integer
  • long / Long
  • byte / Byte
  • char / Character
  • float / Float
  • double / Double
Primitive type arrays:
  • short[]
  • int[]
  • long[]
  • byte[]
  • char[]
  • float[]
  • double[]
Primitive type 2D arrays:
  • short[][]
  • int[][]
  • long[][]
  • byte[][]
  • char[][]
  • float[][]
  • double[][]
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

 

AssertJ - fluent assertions java library

Thanks to all the contributors of this release: Erhard Pointl, Stefano Cordio, Pascal Schumacher, BJ Hargrave, Raymond Augé, Thomas Weißschuh, Maciej Wajcht, Hayden Meloche, Filip Hrisafov, Jayati Goyal, Gyumin Kim, Clemens Grabmann, Roman Leventov, Fr J

assertj.github.io

 

Comments