JUnit은 테스트 메소드 마다 테스트 인스턴스를 새로 만든다.
- 기본 전략.
- 테스트 메소드를 독립적으로 실행하여 예상치 못한 부작용을 방지하기 위함이다.
- 이 전략을 JUnit 5에서 변경할 수 있다.
- 즉 테스트마다
필드
를 공유하지 않는다. - 테스트 메서드마다 System.out.println(this) 를 찍어보면 인스턴스가 다르단 걸 알 수 있다.
- 즉 테스트마다
@TestInstance(Lifecycle.PER_CLASS)
- 테스트 클래스당 인스턴스를 하나만 만들어 사용한다. -> 하나의 인스턴스를 공유한다
- 경우에 따라, 테스트 간에 공유하는 모든 상태를 @BeforeEach 또는 @AfterEach에서 초기화 할 필요가 있다.
- @BeforeAll과 @AfterAll을 인스턴스 메소드 또는 인터페이스에 정의한 default 메소드로 정의할 수도 있다.
- 이걸 사용하면 static 키워드가 필요한 메소드에서 static이 필요 없게 된다.
JUnit 5 테스트 순서
- 제대로 된 단위 테스트라면, 다른 테스트와 동시에 실행되더라도 다른 테스트 코드에 영향을 주지 않는다.
- 서로간에 의존성이 없어야 한다. (다른 코드에 영향 x)
- 그래서 순서가 상관이 없어야 한다.
실행할 테스트 메소드 특정한 순서에 의해 실행되지만
어떻게 그 순서를 정하는지는 분명히 하지 않는다.
(테스트 인스턴스를 테스트 마다 새로 만드는 것과 같은 이유)
경우에 따라, 특정 순서대로
테스트를 실행하고 싶을 때도 있다.
그 경우에는 테스트 메소드를 원하는 순서에 따라 실행하도록
@TestInstance(Lifecycle.PER_CLASS)와 함께 @TestMethodOrder를 사용할 수 있다. (테스트 메서드의 실행 순서를 정하는것
)
- MethodOrderer 구현체를 설정한다.
- 기본 구현체
- Alphanumeric
- OrderAnnoation
- Random
@TestMethodOrder(MethodOrderer.OrderAnnotation.class) // <<<!!
class StudyTest {...
@Order(2)
@Test
void test2() {}
@Order(3)
@Test
void test3() {}
@Order(1)
@Test
void test1() {}
}
1 -> 2 -> 3 순서로 실행되고
- 낮은 값이 높은 우선순위를 갖는다.
- 값이(순위) 같으면 둘중 아무거나 먼저 실행되는거 같다
출처
- 인프런 백기선님 강의 더 자바, 애플리케이션을 테스트하는 다양한 방법
'테스트 > JUnit' 카테고리의 다른 글
Spring Boot JPA Test @DataJpaTest 기본 설정 (3) | 2022.08.27 |
---|---|
JUnit5 - Java에서의 단위테스트5 Mock, Mockito, Stup (0) | 2022.08.21 |
JUnit5 - Java에서의 단위테스트4 Mock, Mockito (0) | 2022.08.21 |
JUnit5 - Java에서의 단위테스트2 - 테스트 반복 (0) | 2022.08.21 |
JUnit5 - Java에서의 단위테스트 1 (0) | 2022.08.21 |