Junit Before? Beforeclass?

테스트 코드를 짜며 (더 잘짜고 싶다… 하..) 짠 테스크 코드에 대한 리뷰를 받았다. 선배 개발자로부터 @Before과 @BeforeClass 차이를 아냐 물어보시기에 저는 ㅠㅠㅠㅠ를 외쳤다. 요즘 항상 좋으신 말을 해주시는 선배 개발자이시다.

현재 개발하는 환경이 Junit4이지만 해당 블로그는 Junit5로 작성할 예정이다

code sample github

Junit4 -> Junit5

Junit4 Junit5 특징
@BeforeClass @BeforeAll
- 테스트 클래스의 모든 테스트 메소드가 실행되기 전에 실행
- static method
- 초기화 코드가 들어갈수 있음
@AfterClass @AfterAll
- 테스트 클래스의 모든 테스트 메소드가 종료된 후 실행
- static method
- 코드를 클린업 할수 있음
@Before @BeforeEach
- 테스트 클래스 안의 테스트 메소드가 한번 실행 될때 마다 실행
- 초기화 코드를 재설정 할수 있음 하지만 초기화 처럼 쓰면 테스트시 힘들어짐
@After @AfterEach
-테스트 클래스 안의 테스트 메소드가 한번 실행 될때 마다 실행
- 예를 들어 테스트가 끝나고 롤백해야 할때

이미지 설명

실행 순서

위의 이미지 순서대로 테스트 코드를 작성해보자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

public class SampleTest {

@BeforeAll
public static void beforeAll(){
System.out.println("BeforeAll");
}

@BeforeEach
public void beforeEach(){

System.out.println("BeforeEach");
}

@AfterEach
public void afterEach(){
System.out.println("AfterEach");
}

@AfterAll
public static void afterAll(){
System.out.println("AfterAll");
}

@Test
public void testCodeOne(){
System.out.println("testCodeOne start ");
}

@Test
public void testCodeTwo(){
System.out.println("testCodetwo start ");
}
}

실행결과 아래와 같은 결과를 얻는다

1
2
3
4
5
6
7
8
BeforeAll
BeforeEach
testCodeOne start
AfterEach
BeforeEach
testCodetwo start
AfterEach
AfterAll

Junit5에 어노테이션 명이 좀더 정확하게 의미를 알려주는것 같다.