본문 바로가기
공부/프로그래밍

Junit 5 Jupiter vs AssertJ 테스트하는데 어떤걸 쓰면 좋을까?

by demonic_ 2025. 2. 28.
반응형

JUnit 5 Jupiter와 AssertJ를 언제 어떤 상황에서 사용하는 게 나은지 고민하는 건 테스트 코드를 더 효율적이고 읽기 쉽게 만들기 위한 중요한 첫걸음이다. 둘 다 Java 테스트에서 널리 사용되지만, 목적과 강점이 다르기 때문에 선택은 상황에 따라 달라질 수 있다. 아래에서 두 도구의 특징과 언제 어떤 걸 쓰는 게 좋은지 정리해 보았다.

 

JUnit 5 Jupiter란?

JUnit 5는 JUnit 프레임워크의 최신 버전으로, 테스트를 작성하고 실행하는 데 필요한 전체적인 구조를 제공하는 테스트 프레임워크다. Jupiter 는 JUnit 5의 핵심 모듈 중 하나로, 테스트 케이스를 정의하고 실행하는데 필요한 API와 기능을 담고 있다. 주요 특징은 아래와 같다.

 

- @Test, @BeforeEach, @AfterEach 같은 어노테이션으로 테스트 생명주기를 관리

- assertEquals, assertTrue, assertThrows 같은 기본적인 단언문 제공.

- 매개변수화된 테스트, 조건부 테스트 실행 등 고급 기능 지원.

- Java 8 이상의 람다 표현식과 같은 현대적인 기능 활용 가능

 

 

AssertJ란?

AssertJ는 단언문 라이브러리로, JUnit 같은 테스트 프레임워크와 함께 사용하면서 더 풍부하고 읽기 쉬운 단언문을 작성할 수 있게 도와준다. 주요 특징은 아래와 같다.

 

- assertThat(actual).isEqualTo(expected) 같은 유연하고 체이닝 가능한 API 제공.

- 문자열, 컬렉션, 예외 등 다양한 데이터 타입에 특화된 단언 메서드.

- 실패 시 상세하고 이해하기 쉬운 에러 메시지 제공.

- IDE 자동 완성 기능을 활용해 직관적으로 작성 가능.

 

 

 

 

둘의 차이점

목적: JUnit 5 Jupiter는 테스트를 "구성하고 실행"하는 프레임워크이고, AssertJ는 테스트의 "검증"부분을 더 강력하고 표현력있게 만드는 도구다. 즉 JUnit이 집을 짓는 설계도라면, AssertJ 는 그 집 안의 가구를 예쁘고 편리하게 배치하는 역할을 한다.

 

단언문 스타일: JUnit의 기본 단언문은 간단하지만 다소 딱딱하고 제한적일 수 있다. 반면 AssertJ는 더 유연하고 자연스러운 문법으로 코드 가독성을 높여준다.

 

사용범위: JUnit5 만으로도 충분히 테스트를 작성할 수 있지만, AssertJ를 추가하면 복잡한 검증 로직을 더 깔끔하게 표현할 수 있다.

 

 

예시 비교

간단한 테스트를 통해 JUnit5와 AssertJ로 각각 작성해보면 차이를 알 수 있다

 

JUnit 5 Jupiter

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class ExampleTest {
    @Test
    void testString() {
        String result = "Hello, World!";
        assertEquals("Hello, World!", result);
        assertTrue(result.startsWith("Hello"));
        assertFalse(result.contains("Goodbye"));
    }
}

 

AssertJ

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

public class ExampleTest {
    @Test
    void testString() {
        String result = "Hello, World!";
        assertThat(result)
            .isEqualTo("Hello, World!")
            .startsWith("Hello")
            .doesNotContain("Goodbye");
    }
}
 
 

AssertJ 버전이 메서드 체이닝 덕분에 읽기 쉽고 한줄로 여러 검증을 묶을 수 있다는 점에서 가독성이 좋다.

 

그럼 언제, 무엇을 써야할까?

 

 

JUnit 5 Jupiter만 써도 괜찮을 때

- 테스트가 단순하고 기본적인 단언문(assertEquals, assertTrue 등)으로 충분한 경우.

- 프로젝트가 경량화되어 외부 의존성을 최소화하고 싶을 때.

- 팀이 JUnit에 익숙하고 새로운 라이브러리를 도입할 필요를 느끼지 않을 때.

 

 

AssertJ를 추가하면 좋은 때

- 테스트 코드의 가독성과 유지보수성을 높이고 싶을 때.

- 복잡한 객체(예: 리스트, 맵)나 예외 검증이 많아질 때.

- 실패 메시지를 더 상세히 보고 싶을 때 (AssertJ는 기본적으로 JUnit보다 더 풍부한 정보를 줍니다).

- 개발자가 IDE 자동 완성을 적극 활용해 빠르게 코드를 작성하고 싶을 때.

 

 

함께 사용하는 경우

실제로 많은 프로젝트에서 JUnit 5와 AssertJ를 같이 사용한다. JUnit 5로 테스트 구조를 잡고, AssertJ로 단언문을 작성하면 두 도구의 장점을 모두 누릴 수 있다. 

예를 들어:

- JUnit 5로 @Test, @ParameterizedTest 같은 기능을 활용해 테스트를 구성.

- AssertJ로 assertThat을 사용해 검증 로직을 깔끔하게 작성.

 

 

결론

- JUnit 5 Jupiter는 필수. 테스트를 실행하려면 어차피 프레임워크가 필요하다.

- AssertJ는 선택이지만, 코드 품질과 가독성을 중요시한다면 추천

 

 

 

만약 지금 작은 프로젝트를 하고 있고 테스트가 간단하다면 JUnit 5만으로도 충분할 것이다. 하지만 프로젝트가 커지거나 팀 작업에서 코드 리뷰를 할 때 가독성이 중요해진다면, AssertJ를 추가하는걸 추천한다. 처음엔 익숙해지는 데 시간이 좀 걸릴 수 있지만, 한 번 익히고 나면 테스트 코드 쓰는 게 훨씬 좋을 것이다.

 

 

 

 

반응형

댓글