JUnit, 왜 그리고 어떻게 써야돼?
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
- *Java 개발자 및 테스트 엔지니어**
- 중급 이상의 Java 경험과 단위 테스트 실무 경험 필요
- 테스트 프레임워크 도입 및 테스트 코드 작성에 관심 있는 개발자
핵심 요약
- JUnit은 Java의 표준 단위 테스트 프레임워크로, Spring, Gradle, IntelliJ 등 주요 도구와 호환 가능
- @Test, @BeforeEach, @ParameterizedTest 등 어노테이션을 통해 테스트 코드 작성 가능
- AssertJ를 연계하여 테스트 결과를 인간 친화적으로 표현할 수 있음
- @Nested, @ParameterizedTest로 테스트 코드 구조화 및 반복 테스트 구현 가능
섹션별 세부 요약
1. JUnit의 중요성
- Java 생태계의 사실상 표준 테스트 프레임워크
- Spring, Maven, Jenkins 등 주요 도구와 호환성 높음
- Java 언어로 테스트 코드 작성 가능
- 테스트 전용 DSL 필요 없이 순수 Java 문법 사용
- CI/CD 연동 용이
- GitHub Actions, Jenkins 등에서 테스트 결과 자동 분석 지원
2. JUnit 주요 어노테이션
@Test
- 테스트 메서드를 선언하는 어노테이션
@BeforeEach
/@AfterEach
- 각 테스트 실행 전후에 실행되는 초기화/정리 메서드 선언
@BeforeAll
/@AfterAll
- 테스트 클래스 초기화 및 종료 시 한 번만 실행되는 메서드 선언 (static 메서드로 사용)
@DisplayName
- 테스트 이름을 사람이 읽기 쉽게 지정
@Disabled
- 특정 테스트 메서드를 임시로 비활성화
3. AssertJ 사용법
- JUnit 기본 Assertion 대신 AssertJ 사용 권장
assertThat()
으로 테스트 결과를 자연스럽게 표현 가능- 예시
- 숫자:
assertThat(result).isEqualTo(10).isGreaterThan(5)
- 문자열:
assertThat(name).startsWith("ye").endsWith("li")
- 객체:
assertThat(user).extracting("name", "age").containsExactly("yeoli", 25)
4. ParameterizedTest 사용법
- 다양한 값을 사용한 반복 테스트 구현
@ValueSource
: 단일 타입 값 입력@CsvSource
: 다중 매개변수 입력 (예:@CsvSource({"yeoli,25", "minwoo,20"})
)@MethodSource
: 커스텀 객체/컬렉션 제공 (static Stream<...> 리턴)@EnumSource
: Enum 값 테스트 가능
결론
- JUnit과 AssertJ를 함께 사용하여 테스트 코드 가독성 및 유연성 향상
- @Nested로 테스트 그룹화, @ParameterizedTest로 반복 테스트 구현
- 테스트 코드는 간결하고 명확하게 작성하여 CI/CD에서의 자동화 테스트 효율성 극대화