본문 바로가기

Language/Java(TestCode)

[TestCode] @TransInstance 테스트 인스턴스 (JUnit5)

- Junit은 테스트 메소드 마다 테스트 인스턴스를 새로 만든다.

- 테스트 메소드를 독립적으로 실행하여 예상치 못한 부작용을 방지하기 위해서

    @custom
    @DisplayName("테스트 인스턴스")
    void instance_ex() {
        System.out.println("value test1 = " + value++);
        System.out.println("instance test1 = " + this);
    }

    @custom
    @DisplayName("테스트 인스턴스2")
    void instance2_ex() {
        System.out.println("value test2 = " + value++);
        System.out.println("instance test1 = " + this);
    }

- 실제로 위 코드를 실행할 경우 다음과같은 결과를 얻게 된다.

- 일반적인 코드라면 value가 어느 한곳은 2라고 찍힐것이라고 생각이 들지만 각각 새로운 인스턴스를 생성하는 것이기 때문에 1이라는 값이 찍히며, 주소값도 다른걸 확인할 수 있다.

 

@TestInstance : 테스트 클래스당 인스턴스를 하나만 만들어 사용한다.

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
class LunchTest {

- 위 처럼 @TestInstance어노테이션을 사용하여 클래스당 인스턴스를 하나만 만들어 사용하게 설정한다.

 

- 결과값을 보면 테스트 인스턴스2 테스트에서는 value의 값이 2로 찍히는걸 확인할 수 있으며 주소값도 동일한걸 알 수 있다

- 위처럼 사용시에는 경우에 따라 테스트 간에 공유하는 모든 상태를 @BeforeEach 또는 @AfterEach에서 초기화 할 필요가 있다.