Java/테스트
JUnit (jUnit5)란?
고기고기물고기
2024. 9. 3. 17:24
JUnit 5란?
JUnit 5는 JUnit 프레임워크의 최신 버전으로, JUnit Platform, JUnit Jupiter, JUnit Vintage라는 세 가지 주요 모듈로 구성
- JUnit Platform: JUnit 5에서 테스트를 실행하는 런처 역할 IDE, 빌드 도구(예: Maven, Gradle)에서 JUnit 테스트를 실행할 수 있는 인프라를 제공
- JUnit Jupiter: JUnit 5의 핵심 테스트 API를 제공 여기에는 새로운 테스트 어노테이션, 확장 모델, 다양한 유틸리티가 포함돼 있어. @Test, @BeforeEach, @AfterEach 같은 어노테이션.
- JUnit Vintage: JUnit 4와 JUnit 3으로 작성된 테스트를 JUnit 5 환경에서 실행할 수 있게 해주는 모듈 덕분에 JUnit 4로 작성된 기존 테스트 코드를 쉽게 유지하면서 JUnit 5로 마이그레이션 가능
JUnit 5의 주요 특징
- 확장된 어노테이션
- @Test: 기본적인 테스트 메서드를 나타내. JUnit 4와 동일하지만, JUnit 5에서는 더 유연하게 사용
- @BeforeEach: 각 테스트 메서드 실행 전에 수행할 작업을 정의. JUnit 4의 @Before에 해당
- @AfterEach: 각 테스트 메서드 실행 후에 수행할 작업을 정의. JUnit 4의 @After에 해당
- @BeforeAll: 모든 테스트 메서드 실행 전에 한 번만 실행. JUnit 4의 @BeforeClass에 해당
- @AfterAll: 모든 테스트 메서드 실행 후에 한 번만 실행. JUnit 4의 @AfterClass에 해당
- @DisplayName: 테스트 메서드의 이름을 커스터마이징, 테스트 보고서에서 더 읽기 쉽게 만들어줌
- @Nested: 클래스 안에 중첩된 테스트 클래스 정의가 가능, 논리적으로 관련된 테스트들을 그룹화 가능
- @Tag: 테스트 메서드나 클래스에 태그를 붙여서, 특정 태그에 따라 테스트 그룹을 실행할 수 있어.
- 람다 표현식과 스트림 API 지원
@Test
void groupedAssertions() {
User user = new User("John", "Doe");
assertAll("user",
() -> assertEquals("John", user.getFirstName()),
() -> assertEquals("Doe", user.getLastName())
);
}
- 이 코드는 assertAll을 사용해서 user 객체의 여러 속성을 한 번에 검증. 만약 어떤 검증이 실패하더라도 다른 검증이 계속 실행되기 때문에, 문제를 더 잘 파악 가능
- JUnit 5에서는 자바 8의 람다 표현식과 스트림 API를 활용. 특히, assertAll 같은 기능은 여러 검증을 하나의 블록으로 묶어서 실행하는 데 유용
3. 확장 모델
JUnit 5에서는 @ExtendWith 어노테이션을 통해 테스트 클래스에 확장 기능을 추가가능. 예를 들어, Mockito와의 통합을 쉽게 하기 위해 @ExtendWith(MockitoExtension.class)를 사용
-
- @ExtendWith: 외부 확장을 추가할 때 사용. 예를 들어, Mockito 확장을 추가해서 모의 객체를 사용.
- ParameterResolver: 테스트 메서드에 파라미터를 주입할 수 있는 기능을 제공. 예를 들어, 의존성을 주입하거나, 테스트 데이터 생성을 쉽게 거눙
@ExtendWith(MockitoExtension.class)
class MyServiceTest {
// Mockito와의 통합을 통해 모의 객체를 사용한 테스트
}
JUnit의 주요 기능
- 테스트 메서드 정의: @Test 어노테이션을 사용해 테스트 메서드를 정의. 각 테스트 메서드는 독립적으로 실행되며, 애플리케이션의 특정 기능을 검증.
- 테스트 실행과 결과 보고: JUnit은 테스트 메서드를 실행하고, 그 결과를 보고합니다. 테스트가 성공했는지, 실패했는지, 또는 예외가 발생을 알 수 있음.
- Assertions (단언문): assertEquals, assertTrue, assertNull 등 다양한 단언문을 제공하여, 테스트 결과가 예상한 값과 일치하는지 확인가능.
- 라이프사이클 관리: JUnit은 테스트 메서드의 실행 전후에 필요한 초기화나 정리 작업을 할 수 있도록 @Before, @After 같은 어노테이션을 제공.
- 테스트 스위트: 여러 테스트 클래스를 하나로 묶어 한 번에 실행할 수 있는 테스트
JUnit 4와 JUnit 5의 차이점
- 어노테이션 이름: JUnit 5에서는 어노테이션 이름이 일부 변경되거나 새로운 어노테이션이 추가 예를 들어, JUnit 4의 @Before, @After는 JUnit 5에서 @BeforeEach, @AfterEach로 바뀜
- 확장 모델: JUnit 4는 @RunWith를 사용해 확장을 적용했지만, JUnit 5는 @ExtendWith를 사용해 더 유연한 확장 모델을 제공.
- 다양한 테스트 기능: JUnit 5는 동적 테스트, 조건부 테스트 실행, 반복 테스트 등 JUnit 4보다 더 많은 기능을 제공.
- 기반 아키텍처: JUnit 5는 완전히 새로운 구조로 설계되어, 플랫폼, Jupiter, Vintage로 모듈화되어 있어. 이로 인해 더 확장 가능하고 유연한 테스트 환경을 제공.