정의

- Java 애플리케이션을 위한 강력하고 직관적인 단언 라이브러리
- JUnit과 함께 사용하여 테스트에서 객체의 상태나 동작을 검증할 수 있는 유창한 API를 제공
- AssertJ는 가독성이 뛰어난 코드를 작성할 수 있도록 도와주며, 다양한 유형의 단언을 지원해 코드 품질 향상에 기여

특징과 장점

1. 특징


1. 유창한 API (Fluent API)
- 메서드 체이닝을 통해 가독성이 높은 단언 구문을 작성할 수 있음
- 예) assertThat(user).hasName("John").isAdult();

2. 다양한 단언 메서드
- 객체, 컬렉션, 배열, 문자열 등 다양한 데이터 타입에 대해 단언할 수 있는 메서드를 제공
- 예) 컬렉션의 크기, 내용, 정렬 여부 등을 쉽게 검증할 수 있음

3. 커스터마이징 가능한 메시지
- 단언 실패 시 사용자 정의 메시지를 지정하여 문제를 쉽게 진단할 수 있도록 지원

4. JUnit과의 통합
- JUnit 4, 5와 함께 사용할 수 있으며, 기존의 JUnit 테스트와 쉽게 통합할 수 있음


2. 장점
장점 설명
가독성 AssertJ는 가독성이 높아 테스트 코드의 이해도를 높일 수 있
유연성 다양한 타입의 단언을 지원하여, 객체의 복잡한 속성도 쉽게 검증할 수 있음
직관적 API가 직관적이어서 테스트를 작성하는 데 필요한 시간을 단축 가능

주요 메서드

메서드 설명
객체 관련 단언 assertThat(object) 주어진 객체에 대한 단언 시작
isEqualTo(expected) 객체가 예상값과 같은지 확인
isNotNull() 객체가 null이 아닌지 확인
문자열 관련 단언 assertThat(string) 문자열에 대한 단언 시작
contains(expectedSubs) 문자열에 특정 부분 문자열이 포함되어 있는지 확인
startsWith(prefix) 문자열이 특정 접두사로 시작하는지 확인
컬렉션 관련 단언 assertThat(collection) 컬렉션에 대한 단언 시작
hasSize(expectedSize) 컬렉션의 크기를 확인
contains(expectedEle) 특정 요소가 컬렉션에 포함되어 있는지 확인

예시

import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;

import java.util.List;

class User {
    private String name;
    private int age;

    // 생성자, 게터, 세터 생략
}

public class UserTest {

    @Test
    void testUserAttributes() {
        User user = new User("John", 30);

        // AssertJ를 사용한 단언
        assertThat(user.getName()).isEqualTo("John");
        assertThat(user.getAge()).isGreaterThan(18);
    }

    @Test
    void testUserList() {
        List<User> users = List.of(new User("Alice", 25), new User("Bob", 20));

        // 컬렉션에 대한 단언
        assertThat(users)
            .hasSize(2)
            .extracting(User::getName)
            .contains("Alice", "Bob")
            .doesNotContain("Charlie");
    }
}

비고

1. AssertJ는 JUnit의 짝!

레퍼런스

1. 구글링, 우테코 프리코스 2주차 관련 문서
2. AssertJ 공식 문서

 

'개발지식 조각 > Java' 카테고리의 다른 글

List, Set, Map, Queue  (0) 2024.10.31
제너럴한 명명규칙 정리  (0) 2024.10.31
JUnit 5과 동적 테스트  (0) 2024.10.31
JUnit 5  (0) 2024.10.31
런타임 예외와 Unchecked Exception  (0) 2024.10.31

+ Recent posts