본문 바로가기

JUnit (Test)

JUnit 의 @TestInstance

다음 테스트 코드가 있다.

 

class CarTest {
    private int number = 0;
    
    @Test
    void test1() {
        System.out.println(++number);
    }

    @Test
    void test2() {
        System.out.println(++number);
    }
}

 

이 클래스 테스트들을 돌리면 결과가 어떻게 나올까.

 

1과 2?

 

나도 처음엔 그렇게 생각했다.

 

하지만 정답은 

 

1과 1이다.

 

왜냐하면, JUnit 에서는 @Test 가 붙은 테스트 메서드를 실행시킬 때, 각각 클래스를 새로 로딩(?) 한다.

 

그럼 처음 생각했던 대로 1, 2가 나오게 하려면 어떻게 해야 할까.

 

@TestInstance 어노테이션을 사용하면 된다.

이 어노테이션에는 인수를 설정할 수 있는데,

 

@TestInstance(TestInstance.Lifecycle.PER_CLASS) 처럼 하면 라이프사이클당 한번의 클래스를 생성하도록 할 수 있다.

 

눈치빠르면 알 수 있지만, 디폴트는

@TestInstance(TestInstance.Lifecycle.PER_METHOD) 이다. 

'JUnit (Test)' 카테고리의 다른 글

@TestMethodOrder  (0) 2021.01.31
JUnit 5 새로 배운 것  (0) 2021.01.30
JUnit5 이 무엇입니까?  (0) 2021.01.29
Exception 테스트하기  (0) 2020.12.06
private 메소드 테스트  (0) 2020.12.06