포스트

테스트(Junit, AssertJ)

✅ JUnit과 AssertJ의 정의 및 장단점 비교

자바 기반의 단위 테스트를 작성할 때 가장 자주 사용하는 도구는 JUnitAssertJ입니다.


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 등과 함께 사용 가능

📜 역사

🔗 공식 문서: https://assertj.github.io/doc/


🆚 3️⃣ JUnit vs AssertJ – 장단점 비교

항목JUnitAssertJ
주요 목적테스트 실행 + 기본 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 라이센스를 따릅니다.