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