[Java] 테스트 코드 라이브러리 AssertJ 사용법 간단 정리 (assertThat, assertThatThrownBy)

그냥사람·2024년 11월 23일

AssertJ를 사용해 테스트 코드를 작성해 보자

AssertJ는 Java 테스트를 위한 assertion 라이브러리이다. AssertJ의 장점을 간단하게 소개한 뒤, 사용법을 알아보고자 한다.

AssertJ의 장점

1. 가독성 높은 코드와 IDE 자동완성 지원

  • 메서드 체이닝(이걸 만족하면서 저것도 만족하는지..)을 통해 사용자에게 직관적인 형태로 assertion을 작성할 수 있어 가독성이 크게 향상된다.
  • IDE에서 체인할 메서드에 대해 자동 완성 기능을 제공하기 때문에 빠르고 정확한 코드 작성이 가능하고, 생산성을 크게 높일 수 있다.

2. 다양한 assertion 메서드

  • 아래에서도 소개하겠지만 정~말 많은 메서드를 가지고 있기 때문에 다양한 상황에 대응할 수 있고, 복잡한 테스트 케이스를 간편하게 처리할 수 있다.

3. 상세한 에러 메시지 제공

  • 테스트 실패 시 명확하고 구체적인 에러 메시지를 제공하기 때문에, 문제를 빠르게 파악하고 수정할 수 있다.

AssertJ 사용 방법

1-0. AssertJ import하기

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

1-1. assertThat

AssertJ의 핵심 메서드로, 테스트 대상 객체에 대한 다양한 검증을 수행할 수 있다.
assertion 부분이 메서드 체이닝을 하는 부분인데, 말 그대로 여러 조건을 만족하는지 검증이 가능하다.

assertThat(실제값).assertion(예상값);

아래는 사용 예시이다. 예시에서는 문자열을 예로 들었지만, 객체명.메서드명(입력값) 같이 객체의 메서드에 대한 결과값 검증에 많이 쓰인다.

String text = "Hello, World!";
assertThat(text)
    .isNotNull()
    .startsWith("Hello")
    .endsWith("!")
    .hasSize(13);

1-2. assertThat 메서드 정리

(1) 공통 메서드 (다양한 타입에 사용 가능)

  • isEqualTo(Object expected): 값이 일치하는지 확인
  • isNotEqualTo(Object expected): 값이 일치하지 않는지 확인
  • isNull(): null인지 확인
  • isNotNull(): null이 아닌지 확인
  • isSameAs(Object expected): 동일한 객체 참조인지 확인
  • isNotSameAs(Object expected): 다른 객체 참조인지 확인
  • isIn(Object... values): 주어진 값들 중 하나인지 확인
  • isNotIn(Object... values): 주어진 값들 중 어느 것도 아닌지 확인
  • isInstanceOf(Class<?> type): 특정 클래스의 인스턴스인지 확인
  • isExactlyInstanceOf(Class<?> type): 정확히 특정 클래스의 인스턴스인지 확인

(1) 문자열 관련 메서드

  • isEmpty(): 빈 문자열인지 확인
  • isNotEmpty(): 빈 문자열이 아닌지 확인
  • startsWith(String prefix): 특정 문자열로 시작하는지 확인
  • endsWith(String suffix): 특정 문자열로 끝나는지 확인
  • contains(CharSequence... values): 특정 문자열을 포함하는지 확인
  • doesNotContain(CharSequence... values): 특정 문자열을 포함하지 않는지 확인
  • hasSize(int expected): 문자열의 길이 확인
  • hasSizeGreaterThan(int expected): 문자열의 길이가 특정 값보다 큰지 확인
  • hasSizeLessThan(int expected): 문자열의 길이가 특정 값보다 작은지 확인

(2) 숫자 관련 메서드

  • isPositive(): 양수인지 확인
  • isNegative(): 음수인지 확인
  • isZero(): 0인지 확인
  • isGreaterThan(T other): 특정 값보다 큰지 확인
  • isLessThan(T other): 특정 값보다 작은지 확인
  • isBetween(T start, T end): 두 값 사이에 있는지 확인

(3) 컬렉션 관련 메서드

  • hasSize(int expected): 컬렉션의 크기 확인
  • isEmpty(): 빈 컬렉션인지 확인
  • isNotEmpty(): 빈 컬렉션이 아닌지 확인
  • contains(T... values): 특정 요소를 포함하는지 확인
  • containsExactly(T... values): 정확히 특정 요소들만 포함하는지 확인
  • containsAnyOf(T... values): 주어진 요소들 중 하나라도 포함하는지 확인
  • doesNotContain(T... values): 특정 요소를 포함하지 않는지 확인

(4) 참/거짓 관련 메서드

  • isTrue(): true인지 확인
  • isFalse(): false인지 확인

2. assertThatThrownBy

assertThat이 여러 조건을 만족하는지를 검증한다면, assertThatThrownBy는 예외 발생을 검증하는 데 사용된다.

assertThatThrownBy(() -> { /* 예외를 발생시키는 코드 */ })
    .isInstanceOf(ExpectedException.class)
    .hasMessageContaining("expected error message"); // 기본 구조

아래는 사용 예시이다. 오류를 throw 하는 부분에 예외가 발생해야 하는
객체명.메서드명(입력값) 을 넣어 시험한다.

assertThatThrownBy(() -> {
    throw new IllegalArgumentException("Invalid argument");
})
    .isInstanceOf(IllegalArgumentException.class)
    .hasMessageContaining("Invalid argument");
profile
Simple is Best, 간결하게 살자

0개의 댓글