모든 테스트 메서드에서 같은 객체 즉 테스트 인스턴스를 공유하는 것이 목적
변수(초기화 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);
}
또한 각각의 다른 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
'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 |