BackEnd/JUnit

JUnit 5. 테스트 인스턴스

hanseom 2022. 2. 3. 17:50
반응형

  JUnit은 기본 전략으로 테스트 메소드마다 테스트 인스턴스를 새로 만듭니다. 테스트간 의존성을 없애고 독립적으로 실행하여 예상치 못한 부작용을 방지하기 위함입니다. 아래 코드에서 value 값을 증가시키기 때문에 1, 2, 3이 출력되어야 할 것 같지만 결과는 모두 1이 출력됩니다.

package com.java.JUnit5;

import org.junit.jupiter.api.Test;

public class InstanceTests {
    int value = 1;

    @Test
    void printOne() {
        System.out.println(value++); // [결과]: 1
    }

    @Test
    void printTwo() {
        System.out.println(value++); // [결과]: 1
    }

    @Test
    void printThree() {
        System.out.println(value++); // [결과]: 1
    }

}

  해당 전략을 JUnit 5에서 변경할 수 있습니다. @TestInstance(Lifecycle.PER_CLASS)를 사용하면 테스트 클래스당 인스턴스를 하나만 만들어 사용합니다.

package com.java.JUnit5;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.TestInstance;

@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class InstanceTests {
    int value = 1;

    @Test
    void printOne() { 
        System.out.println(value++); // [결과]: 1
    }

    @Test
    void printTwo() {
        System.out.println(value++); // [결과]: 2
    }

    @Test
    void printThree() {
        System.out.println(value++); // [결과]: 3
    }

}

 

반응형