ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JUnit] 테스트 클래스 안에서 변수 공유하기
    스프링프레임워크/junit 2021. 1. 21. 21:47

    이번 시간에는 테스트 클래스 안에서 변수 값을 공유해서 사용하는 방법에 대해서 알아보도록 하겠습니다.

     

    아래 테스트 케이스는 전부 성공적으로 종료됩니다.

    그 이유는 각각의 test 함수가 호출 될 때마다 새로운 AddTest 객체가 생성되기 때문에 sum의 값은 각각의 test마다 1로 초기화 됩니다.

    @SpringBootTest
    public class AddTest {
    
        private int sum = 1;
    
        @Test
        void addingTwoReturnsThree() {
            sum += 2;
            assertEquals(3, sum);
        }
    
        @Test
        void addingThreeReturnsFour() {
            sum += 3;
            assertEquals(4, sum);
        }
    }

     

    각각의 테스트 전에 호출되는 @BeforeAll 어노테이션도 살펴보겠습니다.

    아래와 같이 static 함수로 되어 있기 때문에 @Test에서 해당 값을 사용할 수가 없게 됩니다.

    @SpringBootTest
    public class AddTest {
    
        private static int sum = -1;
        
        @BeforeAll
        public static void setup() {
            sum = 0;    
        }
    }

     

    다음과 같이 @TestInstance(LifeCycle.PER_CLASS) 어노테이션을 이용하면 @BeforeAll로 instance 함수로 사용할수 있고 멤버 변수의 값도 공유할 수 있게 됩니다.

    이번에는 @Test 케이스마다 AddTest 객체가 다시 생성되지 않으므로 sum의 값은 공유되며 실패하게 됩니다.

    @SpringBootTest
    @TestInstance(LifeCycle.PER_CLASS)
    public class AddTest {
    
        private int sum = 1;
    
        @Test
        void addingTwoReturnsThree() {
            sum += 2;
            assertEquals(3, sum);
        }
    
        @Test
        void addingThreeReturnsFour() {
            sum += 3;
            assertEquals(4, sum);
        }
    }

     

    댓글

Designed by Tistory.