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. 테스트 종료. |