AssertJ 기본 사용법

dongbin_Shin·2021년 11월 24일
1

Test

목록 보기
2/7
post-thumbnail

AssertJ는 무엇인가?

AssertJ

  • assertion을 제공하는 자바 라이브러리
  • 테스트 코드, 에러 메세지의 가독성을 높여줌

JUnit5에서도 AssertJ와 비슷하게 값 검증을 할 수 있는 Assertionsassert메소드들을 제공한다. 그럼 이 둘 간 차이점이 무엇인지 아래 코드를 먼저 보자.

assertEquals(expected, actual);
assertThat(actual).isEqualTo(expected);

코드를 보면 알 수 있듯 AssertJ에서 제공하는 assertion의 가독성이 더 높다.
AssertJ의 장점을 좀 더 구체적으로 알아보면 다음과 같다.
1. 테스트를 할 때 필요한 거의 모든 메소드를 제공
2. 메소드 체이닝을 지원해서 더 짧고 간결하게 코드 작성 가능

사용 예시

의존성 추가

AssertJ를 사용하려면 먼저 외부 의존성을 추가해주어야 한다.
해당 의존성은 maven repository 사이트에서 찾을 수 있다.

import static method

의존성을 추가한 후에는 메소드를 사용하기 위해 static method로 import해준다.

Chaining Test - String

Chaining Test - Number

Error Message Description


Filtering assertions - Iterables or Array 적용

Extracting

리스트에서 특정 필드만 뽑아 테스트

여러 필드 뽑아 테스트 - Tuple 이용

Soft assertions

모든 assertions를 실행 후 실패 내역 일괄 확인

Exception 테스트

원하는 Exception이 발생하는지 검증

assertThat

assertThatThrownBy

자주 쓰이는 Exception Syntax

import static org.assertj.core.api.Assertions.*;

public class ExceptionSyntax {
    @Test
    @DisplayName("NullPoint 예외 처리")
    void nullPoint() {
        assertThatNullPointerException().isThrownBy(() -> {
                    throw new NullPointerException("null!");
                }).withMessage("%s!", "null")
                .withMessageContaining("nu")
                .withNoCause();
    }

    @Test
    @DisplayName("IllegalArgument 예외 처리")
    void illegalArgs() {
        assertThatIllegalArgumentException().isThrownBy(() -> {
                    throw new IllegalArgumentException("Illegal args!");
                }).withMessage("%s!", "Illegal args")
                .withMessageContaining("Il")
                .withNoCause();
    }

    @Test
    @DisplayName("IllegalState 예외 처리")
    void illegalState() {
        assertThatIllegalStateException().isThrownBy(() -> {
                    throw new IllegalStateException("Illegal state!");
                }).withMessage("%s!", "Illegal state")
                .withMessageContaining("Il")
                .withNoCause();
    }

    @Test
    @DisplayName("IO 예외 처리")
    void io() {
        assertThatIOException().isThrownBy(() -> {
                    throw new IOException("IO!");
                }).withMessage("%s!", "IO")
                .withMessageContaining("I")
                .withNoCause();
    }
}

Reference

AssertJ 기본 사용법

profile
멋있는 백엔드 개발자

0개의 댓글