Language/Java(TestCode)
[TestCode] @TransInstance 테스트 인스턴스 (JUnit5)
비독개
2022. 8. 27. 20:56
- 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에서 초기화 할 필요가 있다.