본문 바로가기

Java/Test

(Test) JUnit 5 테스트 인스턴스

모든 테스트 메서드에서 같은 객체 즉 테스트 인스턴스를 공유하는 것이 목적

 

 

변수(초기화 1 )를 하나 두고 각각의 메서드마다 1씩 증가시킬 때 2, 3 이 찍히리라 예상되지만

2라는 동일한 값만 찍힌다.

int val = 1;

@FastTest
@DisplayName("주누의 개인공부 시간 fast")
void create_new_study() {
    Study study = new Study(val++);
    System.out.println(val);
}
@SlowTest
@DisplayName("주누의 개인공부 시간 slow")
public void create_new_study2() {
    Study study = new Study(val++);
    System.out.println(val);
}

2가 찍힘
2가 찍힘

또한 각각의 다른 Hashcode값이 찍힌다.

 

즉 각각의 테스트 메서드마다 다른 클래스 인스턴스를 만든다.

왜?

테스트 간의 의존성을 없애기 위해서이다.

 

 

JUnit은 테스트 메서드마다 테스트 인스턴스를 새로 만든다.

  • 이것이 기본 전략.

  • 테스트 메서드를 독립적으로 실행하여 예상치 못한 부작용을 방지하기 위함이다.

  • 이 전략을 JUnit 5에서 변경할 수 있다.


@TestInstance(Lifecycle.PER_CLASS)

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

  • 경우에 따라, 테스트 간에 공유하는 모든 상태를 @BeforeEach 또는 @AfterEach에서 초기화할 필요가 있다.

  • @BeforeAll과 @AfterAll을 인스턴스 메서드 또는 인터페이스에 정의한 default 메서드로 정의할 수도 있다. 

 

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

 

이렇게 하면 기존의 AfterAll, BeforeAll 또한 static일 필요가 없어진다.

@BeforeAll
void beforeAll() {
    System.out.println("beforeAll");
}

@AfterAll
void afterAll() {
    System.out.println("AfterAll");
}

 

결과


코드 참조

https://github.com/mike6321/PURE_JAVA/tree/master/HowToTest/inflearn-the-java-test

 

mike6321/PURE_JAVA

Contribute to mike6321/PURE_JAVA development by creating an account on GitHub.

github.com

 

'Java > Test' 카테고리의 다른 글

(Test) JUnit5 - junitplatform.properties  (0) 2020.01.01
(Test) JUnit 5 테스트 순서  (0) 2019.12.31
(Test) JUit5 테스트 반복하기(2)  (0) 2019.12.30
(Test) JUit5 테스트 반복하기(1)  (0) 2019.12.30
(Test) JUit5 커스텀 태그  (0) 2019.12.30