728x90
반응형
[JUnit5] 인스턴스 테스트와 테스트 순서대로 실행하는 방법
인스턴스 테스트
🎲 독립 시행
JUnit
의 기본전략은 테스트 메소드 마다 테스트 인스턴스를 새로 생성합니다.
코드로 보면 바로 이해가 되실것 입니다.
public class InstanceTest {
int value = 1;
@Test
@DisplayName("value를 1증가 했기 때문에 2가 된다.")
void test1() {
System.out.println(this); // 메소드 해시
value++; // 1증가
Assertions.assertEquals(2, value);
}
@Test
@DisplayName("value를 1증가 했기 때문에 3 된다.")
void test2() {
System.out.println(this); // 메소드 해시
value++; // 1증가
Assertions.assertEquals(3, value);
}
}
value
를 1씩 2번 증가 시켰는데, 2번째 테스트에서는 value
의 값이 2 입니다.
이처럼 JUnit
의 기본 전략은 테스트 메소드 마다 테스트 인스턴스를 새로 생성합니다.
해시값을 보면 다른 것을 확인할 수 있습니다.^^
왜 그럴까요? 🤔
테스트 메소드를 독립적으로 실행하여 예상치 못한 부작용을 방지하기 위함 입니다.
🎲 독립시행으로 테스트를 수행한다는 것이죠!
테스트 실행 순서는 보장되어 있지 않습니다.
따라서 메소드 마다value
의 값은 항상 1로 시작합니다.
@TestInstance(LifeCycle.PER_CLASS)
이 전략을 JUnit5
에서는 변경할 수 있습니다.
// 인스턴스 생성 전략 클래스 단위로 변경
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
public class InstanceTest {
int value = 1;
@Test
@DisplayName("value를 1증가 했기 때문에 2가 된다.")
void test1() {
System.out.println(this); // 메소드 해시
value++; // 1증가
Assertions.assertEquals(2, value);
}
@Test
@DisplayName("value를 1증가 했기 때문에 3 된다.")
void test2() {
System.out.println(this); // 메소드 해시
value++; // 1증가
Assertions.assertEquals(3, value);
}
}
그런데 우리는 경우에 따라 테스트를 순서대로 실행하고 싶을 때도 있습니다.
이런 상황에서는 어떻게 해야할까요? 🤔
테스트 순서대로 실행하기
테스트 순서는 JUnit
내부적으로 정해진 순서가 있습니다.
하지만 그 순서에 우리가 100% 의존할 수는 없습니다.
우리의 입맛에 맞게 테스트 순서를 변경하려면 어떻게해야 할까요?
@TestMethodOrder
@TestMethodOrder
을 사용하면 우리가 테스트 순서를 정하여 실행할 수 있습니다.
기본적으로 아래 3가지 구현체가 있습니다.
- Alphanumeric
- OrderAnnoation
- Random
// 테스트 순서 정하기
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class OrderTest {
// Order의 숫자가 낮을 수록 먼저 실행
@Test
@DisplayName("4번으로 실행")
@Order(4)
void test4() {
System.out.println(4);
}
@Test
@DisplayName("1번으로 실행")
@Order(1)
void test1() {
System.out.println(1);
}
@Test
@DisplayName("2번으로 실행")
@Order(2)
void test2() {
System.out.println(2);
}
@Test
@DisplayName("3번으로 실행")
@Order(3)
void test3a() {
System.out.println(3);
}
}
참고
728x90
반응형
'테스트 > 0+ JUnit' 카테고리의 다른 글
[JUnit] 회원가입 API 컨트롤러, 서비스, 리포지토리 테스트 예제 (5) | 2023.06.09 |
---|---|
[JUnit5] 테스트 인자 값 타입 변환하는 방법 (0) | 2023.05.17 |
[JUnit5] 환경변수 조건에 따라 테스트 실행하는 방법 (0) | 2023.05.05 |
[JUnit5] Assertions 기본 사용법 (0) | 2023.05.05 |
[JUnit5] JUnit5 기본 어노테이션 (0) | 2023.05.04 |