테스트(Junit, AssertJ)
✅ JUnit과 AssertJ의 정의 및 장단점 비교
자바 기반의 단위 테스트를 작성할 때 가장 자주 사용하는 도구는 JUnit
과 AssertJ
입니다.
1️⃣ JUnit이란?
🔹 정의
JUnit은 Java 언어를 위한 가장 대표적인 단위 테스트 프레임워크입니다.
테스트 케이스 작성, 실행, 결과 검증을 위한 다양한 기능을 제공하며, assertEquals
, assertTrue
같은 기본 검증 메서드도 포함되어 있습니다.
🧰 주요 특징
- 테스트 실행 및 수명주기 관리 (
@Test
,@BeforeEach
,@AfterEach
, 등) - 기본적인 Assertion 메서드 제공
- Java 표준 테스트 프레임워크로 거의 모든 IDE 및 빌드 도구에서 기본 지원
📜 역사
- 1997년 Kent Beck에 의해 최초 개발 (Smalltalk에서 JUnit 개념 도입)
- 이후 Java 진영의 테스트 문화 확산에 크게 기여
- 현재는 JUnit 5 (Jupiter) 버전이 주류이며, 모듈 기반 아키텍처 제공
🔗 공식 문서: https://junit.org/junit5/
2️⃣ AssertJ란?
🔸 정의
AssertJ는 Java 테스트 코드에서 더 풍부하고 가독성 좋은 assertion을 작성할 수 있도록 도와주는 라이브러리입니다.
Fluent API 스타일을 통해 코드가 자연어처럼 읽히며, 복잡한 데이터 구조 검증에도 매우 유용합니다.
🧰 주요 특징
- 체이닝 방식의
assertThat()
기반 API - 컬렉션, Optional, Stream, 예외 등 다양한 객체 타입 검증 지원
- 매우 상세한 에러 메시지 제공 (디버깅에 탁월)
- JUnit, TestNG 등과 함께 사용 가능
📜 역사
- JUnit의 기본 Assertion이 부족하다는 피드백에서 시작
- 초기에는
FEST
라는 이름으로 시작 - 이후
AssertJ
로 발전하며 커뮤니티 주도로 확장됨
🔗 공식 문서: https://assertj.github.io/doc/
🆚 3️⃣ JUnit vs AssertJ – 장단점 비교
항목 | JUnit | AssertJ |
---|---|---|
주요 목적 | 테스트 실행 + 기본 assertion 제공 | Fluent 스타일로 강력한 assertion 제공 |
의존성 | 없음 (표준 포함) | 외부 의존성 필요 |
가독성 | 비교적 낮음 (assertEquals(a, b) ) | 높음 (assertThat(a).isEqualTo(b) ) |
지원 타입 | 기본 타입 중심 | 컬렉션, Optional, Stream, 예외 등 풍부하게 지원 |
에러 메시지 | 단순한 출력 | 자세한 정보 포함 (어디서 실패했는지 명확히) |
커스터마이징 | 어려움 | Custom matcher/condition 등 확장 가능 |
사용 방식 | 함수형 (정적 메서드 기반) | Fluent API (체이닝 방식) |
✅ 예시 비교
숫자 비교
1
2
3
4
5
// JUnit
assertEquals(10, calculator.add(7, 3));
// AssertJ
assertThat(calculator.add(7, 3)).isEqualTo(10);
글 작성 이유
- 김영한님 강의를 보던 도중에 Junit을 쓰지 말고 AssertJ를 써야한다고 하셔서 왜 그런지 찾아봤습니다.
출처
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.