-
[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); } }