java/intelliJ
[Intellij] JUnit5 Stateful Test
danuri
2021. 7. 5. 03:58
다음 테스트는 각 테스트(메서드)마다 새롭게 number 멤버 변수가 생성되기 때문에 두 테스트 모두 0이 출력된다.
class NonStatefulTest {
private int number;
@Test
void test1() {
System.out.println(number++);
}
@Test
void test2() {
System.out.println(number++);
}
}
<결과>
0 //test1
0 //test2
이를 Stateful하게 테스트를 작성하고 싶다면 다음과 같이 애노테이션을 설정하면 된다.
//default: @TestInstance(TestInstance.Lifecycle.PER_METHOD)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class StatefulTest {
private int number;
@Test
void test1() {
System.out.println(number++);
}
@Test
void test2() {
System.out.println(number++);
}
}
<결과>
0 //test1
1 //test2
JUnit은 일반적으로 단위 테스트 간에 순서를 보장해주지 않기 때문에 다음과 같이 순서를 부여할 수 있다.
특히, Stateful 테스트에서 순서를 부여하면 원하는 의도대로 테스트 짜기 좋다.
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class StatefulTest {
private int number;
@Test @Order(2)
void test1() {
System.out.println(number++);
}
@Test @Order(1)
void test2() {
System.out.println(number++);
}
}
<결과>
0 //test2
1 //test1