반응형
테스트 인스턴스 전략
- JUnit은 테스트 메소드마다 테스트 인스턴스를 새로 만든다.
- 이것은 JUnit의 기본 전략이다.
- 인스턴스를 테스트 메소드마다 만드는 이유
- 테스트간의 의존성 제거
- 테스트가 실행되는 순서에 따라 원하지 않는 결과가 발생할 수 있다.
- 테스트 메소드를 독립적으로 실행하여 예상치 못한 부작용을 방지하기 위함이다.
- JUnit 5에서는 이 기본 전략을 변경할 수 있다.
- JUnit 4에서는 기본 전략 변경을 지원하지 않는다.
@TestInstance
- 테스트 클래스당 인스턴스를 하나만 만들어 사용한다.
- 경우에 따라, 테스트 간에 공유하는 모든 상태를
@BeforeEach
또는@AfterEach
에서 초기화 할 필요가 있다.
@BeforeAll
과@AfterAll
을 인스턴스 메소드 또는 인터페이스에 정의한 default 메소드로 정의할 수도 있다.
테스트 순서
- 실행할 테스트 메소드는 내부적으로 특정한 순서에 의해 실행되지만 어떻게 그 순서를 정하는지는 의도적으로 분명히 하지 않는다.
- 테스트 인스턴스를 테스트마다 새로 만드는 것과 같은 이유
- 제대로 작성된 단위 테스트라면 서로 다른 테스트와 독립적으로 수행되어도 문제가 없어야한다.
- 그러나 경우에 따라, 특정 순서대로 테스트를 실행하고 싶을 때도 있다.
- 통합 테스트, 시나리오 테스트, ...
- 예) 회원 가입 → 회원 로그인 → 개인 페이지 이동 → 개인 페이지에서 닉네임 변경
- 테스트 간 상태정보 유지(테스트 간 의존성 존재)
- 그 경우에는 테스트 메소드를 원하는 순서에 따라 실행하도록
@TestMethodOrder
를 사용할 수 있다.@TestMethodOrder
단독으로 사용해도 순서대로 테스트가 수행된다.
@TestInstance
와@TestMethodOrder
를 같이 사용하면 메소드 인스턴스가 하나이기 때문에 테스트 간 상태정보도 유지하면서 순서대로 테스트가 수행된다.
@TestMethodOrder
사용방법@TestMethodOrder
의 인자에 MethodOrderer 구현체를 설정한다.
- MethodOrderer 기본 구현체
- Alphanumeric
- OrderAnnoation
- Order 애노테이션을 통해 순서 지정(낮은 값일수록 높은 우선 순위)
- Random
JUnit 5 - 테스트 인스턴스, 테스트 순서 예제
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class StudyTest {
...
...
...
int value = 0;
@Order(10)
@Tag("fast")
@Test
void testInstance() {
System.out.println(this + ":" + value++); // 0
}
@Order(11)
@Tag("fast")
@Test
void testInstance2() {
System.out.println(this + ":" + value++); // 0
}
@Order(12)
@Tag("fast")
@Test
void testInstance3() {
System.out.println(this + ":" + value++); // 0
}
}
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
사용 시, 테스트 인스턴스 해시 값이 같다.(클래스당 하나의 테스트 인스턴스 사용) 그리고 뒤의 숫자 상태정보가 유지되고 있다.@TestInstance(TestInstance.Lifecycle.PER_CLASS)
을 사용하지 않았다면 테스트마다 인스턴스가 생성되고 숫자 상태정보도 유지되지 않는다.
@TestMethodOrder
를 사용하여 테스트 순서가 작성 순서대로 수행되고 있다.
- 결과
[참고자료]
반응형
'Java > Test Framework' 카테고리의 다른 글
[더 자바, 애플리케이션을 테스트하는 다양한 방법] JUnit 5 - 확장 모델 (0) | 2021.07.27 |
---|---|
[더 자바, 애플리케이션을 테스트하는 다양한 방법] JUnit 5 - 테스트 설정 파일 (0) | 2021.07.26 |
[더 자바, 애플리케이션을 테스트하는 다양한 방법] JUnit 5 - 테스트 반복수행 (0) | 2021.07.25 |
[더 자바, 애플리케이션을 테스트하는 다양한 방법] JUnit 5 - 태깅과 필터링 (0) | 2021.07.23 |
[더 자바, 애플리케이션을 테스트하는 다양한 방법] JUnit 5 - 조건에 따라 테스트 실행 (0) | 2021.07.21 |