JUnit 단위 테스트의 라이프사이클은 테스트 메서드가 실행되기 전후에 수행되는 여러 단계로 구성됩니다. JUnit 5를 기준으로 단위 테스트의 라이프사이클을 설명하겠습니다. JUnit 5는 이전 버전인 JUnit 4와 비교하여 더 많은 기능과 유연성을 제공합니다.
JUnit 단위 테스트 라이프사이클
- 테스트 클래스 초기화 (
@BeforeAll
) - 각 테스트 메서드 실행 전 초기화 (
@BeforeEach
) - 테스트 메서드 실행 (
@Test
) - 각 테스트 메서드 실행 후 정리 (
@AfterEach
) - 테스트 클래스 종료 (
@AfterAll
)
이러한 라이프사이클 메서드는 테스트 클래스 및 메서드의 실행 순서와 상태 관리를 돕습니다.
어노테이션 설명
- @BeforeAll: 모든 테스트 메서드가 실행되기 전에 한 번 실행됩니다. 이 메서드는
static
으로 선언해야 합니다. - @BeforeEach: 각 테스트 메서드가 실행되기 전에 실행됩니다.
- @AfterEach: 각 테스트 메서드가 실행된 후에 실행됩니다.
- @AfterAll: 모든 테스트 메서드가 실행된 후에 한 번 실행됩니다. 이 메서드는
static
으로 선언해야 합니다. - @Test: 실제 테스트 메서드를 나타냅니다. 각 테스트 메서드는 독립적으로 실행됩니다.
- @DisplayName: 테스트 클래스나 테스트 메서드에 사용자 정의 이름을 제공합니다.
- @Disabled: 특정 테스트 클래스나 메서드를 비활성화합니다.
예제 코드
다음은 JUnit 5에서 단위 테스트 라이프사이클을 설명하는 예제 코드입니다.
import org.junit.jupiter.api.*;
public class LifecycleTest {
@BeforeAll
static void initAll() {
System.out.println("Before All Tests");
}
@BeforeEach
void init() {
System.out.println("Before Each Test");
}
@Test
@DisplayName("Test 1")
void test1() {
System.out.println("Executing Test 1");
Assertions.assertEquals(2, 1 + 1);
}
@Test
@DisplayName("Test 2")
void test2() {
System.out.println("Executing Test 2");
Assertions.assertTrue(3 > 2);
}
@AfterEach
void tearDown() {
System.out.println("After Each Test");
}
@AfterAll
static void tearDownAll() {
System.out.println("After All Tests");
}
}
출력 예시
Before All Tests
Before Each Test
Executing Test 1
After Each Test
Before Each Test
Executing Test 2
After Each Test
After All Tests
설명
- @BeforeAll:
initAll()
메서드는 테스트 클래스 내의 모든 테스트 메서드가 실행되기 전에 딱 한 번 호출됩니다. 주로 테스트에 필요한 전역 설정이나 초기화를 수행하는 데 사용됩니다. - @BeforeEach:
init()
메서드는 각 테스트 메서드가 실행되기 전에 호출됩니다. 테스트 메서드마다 독립적인 설정이 필요한 경우에 사용됩니다. - @Test:
test1()
과test2()
메서드는 실제 테스트 코드입니다. 각 테스트는 독립적으로 실행되며, 서로 영향을 미치지 않습니다. - @AfterEach:
tearDown()
메서드는 각 테스트 메서드가 실행된 후에 호출됩니다. 테스트 메서드에서 사용된 리소스를 정리하거나 후속 작업을 수행하는 데 사용됩니다. - @AfterAll:
tearDownAll()
메서드는 모든 테스트 메서드가 실행된 후에 딱 한 번 호출됩니다. 주로 전역 리소스를 해제하거나 후속 작업을 수행하는 데 사용됩니다.
결론
JUnit 단위 테스트의 라이프사이클은 테스트 실행 전후에 특정 작업을 수행할 수 있도록 다양한 어노테이션을 제공합니다. 이를 통해 테스트 클래스와 메서드의 상태를 관리하고, 초기화 및 정리 작업을 효과적으로 수행할 수 있습니다. JUnit 5는 이러한 라이프사이클 메서드를 통해 테스트를 보다 유연하고 강력하게 작성할 수 있도록 지원합니다.
'Spring Framework' 카테고리의 다른 글
Dependency Injection (DI : 의존성주입) (0) | 2024.08.07 |
---|---|
스프링 IoC(Inversion of Control) 컨테이너 (0) | 2024.08.07 |
어썰션(Assertion)과 어썰트(Assert) (1) | 2024.08.07 |
IoC(Inversion of Control) 컨테이너 (1) | 2024.08.06 |
SOLID(객체 지향 설계 원칙) (1) | 2024.08.05 |