JUnit은 객체의 생명주기 (Life Cycle) 관리를 지원한다.
이 기능을 이용하면 각 테스트 케이스마다 새로운 객체를 생성해주므로
각 테스트 케이스의 독립성을 확보 할 수 있다.

| 어노테이션 | 실행시점 | Static 사용 여부 | 예 |
|---|---|---|---|
| @BeforeAll | 전체 테스트 시작하기 전에 처음으로 한 번만 실행 | 전체 테스트 실행 주기에서 한 번만 호출 하기 때문에 메서드를 static 선언 | 데이터베이스 연결 or 테스트 환경을 초기화 할 때 사용 |
| @BeforeEach | 테스트 케이스를 시작하기 전에 매번 실행 | 각 인스턴스에 대해 메서드 호출해야 하므로 메서드는 static 아니어야 함 | 테스트 메서드에서 사용하는 객체 초기화 or 테스트에 필요한 값을 미리 넣을 때 사용 |
| @AfterAll | 전체 테스트를 마치고 종료하기 전에 1회 실행 | 전체 테스트 실행 주기에서 한 번만 호출되어야 하기 때문에 메서드를 static으로 선언 | 데이터베이스 연결 종료 or 공통적으로 사용하는 자원을 해제할 때 사용 |
| @AfterEach | 각 테스트 케이스 종료하기 전 매번 실행 | 각 인스턴스에 대해 메서드 호출해야 하므로 메서드는 static 아니어야 함 | 테스트 이후에 특정 데이터를 삭제해야 하는 경우에 사용 |
public class JunitCycleTest {
@BeforeAll
static void beforeAll() {
System.out.println("@BeforeAll");
}
@BeforeEach
public void beforeEach() {
System.out.println("@BeforeEach");
}
@Test
public void test1() {
System.out.println("test1");
}
@Test
public void test2() {
System.out.println("test2");
}
@Test
public void test3() {
System.out.println("test3");
}
@AfterAll
static void afterAll() {
System.out.println("@AfterAll");
}
@AfterEach
public void afterEach() {
System.out.println("@AfterEach");
}
}
| 우선 실행 순서를 보자면 |
|---|
| 1. @BeforeAll 실행 |
| 2. @BeforeEach 실행 |
| 2-1. @Test 실행 |
| 2-2. @AfterEach 실행 |
| 2-3. 모든 @Test 가 완료 될 때까지 순차적으로 실행 |
| 3. @AfterAll |
| 4. 테스트 종료. |
| 우선 실행 순서를 보자면 |
|---|
| 1. @BeforeAll |
| 2. @BeforeEach |
| 2-1. test1 |
| 2-2. @AfterEach |
| 3. @BeforeEach |
| 3-1. test2 |
| 3-2. @AfterEach |
| 4. @BeforeEach |
| 4-1. test3 |
| 4-2. @AfterEach |
| 5. @AfterAll |
| 6. 테스트 종료. |
