정의
- 자바의 대표적인 단위 테스트 프레임워크로, 다양한 테스트 기능과 유연한 확장성을 제공
- JUnit 4와 달리 모듈화되어 있으며, 여러 컴포넌트가 결합된 구조로 이루어져 있어 유연성과 확장성이 강화됨
장점
1. 유연한 구조
다양한 테스트 엔진과 확장 기능을 통해 사용자가 자유롭게 테스트 환경을 구성할 수 있음
2. 향상된 가독성
@DisplayName, 람다 표현식 등으로 테스트 코드의 가독성을 높일 수 있음
3. 조건부 테스트와 동적 테스트
다양한 테스트 조건과 환경 설정을 지원해 복잡한 테스트 시나리오를 쉽게 다룰 수 있
주요 구성 요소
| 모듈명 |
설명 |
| JUnit Platform |
테스트를 실행하는 플랫폼 다양한 테스트 엔진과 연동됨 IDE나 빌드 툴(예: Gradle, Maven)과 통합되어, 다양한 환경에서 테스트를 실행하고 결과를 확인할 수 있음 |
| JUnit Jupiter |
JUnit 5에서 작성하는 새로운 테스트 API JUnit 5의 모든 테스트와 확장 기능을 제공 |
| JUnit Vintage |
JUnit 3과 JUnit 4로 작성된 기존 테스트 코드를 실행할 수 있도록 지원하는 모듈 JUnit 5로 마이그레이션되지 않은 코드와의 호환성을 제공 |
주요 어노테이션
| 어노테이션 |
설명 |
| @Test |
테스트 메서드를 나타냄 |
| @BeforeEach |
각 테스트 메서드가 실행되기 전에 호출됨 JUnit 4의 @Before에 해당 |
| @AfterEach |
각 테스트 메서드가 실행된 후 호출됨 JUnit 4의 @After에 해당 |
| @BeforeAll |
테스트 클래스 내의 모든 테스트 메서드 실행 후 한 번만 호출됨 메서드는 static이어야 함 |
| @DisplayName |
테스트 메서드에 이름을 붙여 가독성을 높임 |
| @Disabled |
해당 테스트를 비활성화하여 실행하지 않도록 함 |
| @Tag |
특정 테스트 그룹을 설정하여, 원하는 테스트만 선택적으로 실행 |
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;
class CalculatorTest {
@BeforeAll
static void setupAll() {
System.out.println("테스트 시작 전 한 번 실행됩니다.");
}
@BeforeEach
void setup() {
System.out.println("각 테스트 메서드 전 실행됩니다.");
}
@Test
@DisplayName("덧셈 테스트")
void testAddition() {
Calculator calculator = new Calculator();
assertEquals(5, calculator.add(2, 3), "2 + 3 = 5 여야 합니다.");
}
@Test
@DisplayName("나누기 테스트")
void testDivision() {
Calculator calculator = new Calculator();
assertThrows(ArithmeticException.class, () -> calculator.divide(10, 0), "0으로 나눌 때 예외가 발생해야 합니다.");
}
@AfterEach
void tearDown() {
System.out.println("각 테스트 메서드 후 실행됩니다.");
}
@AfterAll
static void tearDownAll() {
System.out.println("테스트 종료 후 한 번 실행됩니다.");
}
}
(각 메서드가 올바르게 작동하는지 확인하기 위해 assertEquals와 assertThrows 등의 어서션을 사용)
JUnit 4와 달라진 점
1. 람다 표현식 사용
JUnit 5에서는 Assertions와 Assumptions API가 향상되어 람다 표현식을 활용한 직관적인 코드 작성이 가능
2. 동적 테스트
@TestFactory를 통해 동적으로 테스트를 생성할 수 있음
이는 런타임에 테스트 데이터를 만들어 다양한 경우의 수를 테스트할 때 유용함
3. 조건부 테스트 실행
특정 조건에서만 테스트를 실행하는 @EnabledOnOs, @DisabledOnJre와 같은 어노테이션이 추가되어 운영 체제, JRE 버전 등에 따라 테스트를 설정할 수 있음
4. 확장 기능 (Extensions)
@ExtendWith를 통해 외부 라이브러리와 통합하거나 커스텀 확장을 추가해 테스트 환경을 제어할 수 있
비고
1. 컬렉션도 그렇고 이것도 그렇고 프레임워크가 뭐지? 찾아봐야겠다.
2. 동적테스트가 어떤 건지 감이 잘 안 잡히는데, 더 알아보자.
레퍼런스
1. JUnit5 공식 문서
2. 구글링, 우테코 프리코스 1주차 관련 문서
3. 멘토링 강의, 코드 예시의 경우 ChatGPT