JUnit 이 테스트 메소드를 실행하는 순서는 나름의 알고리즘을 사용하여 정렬된다고 하는데, 어떤 규칙인지는 잘 모르겠다.
그리고 보통의 단위 테스트는 실행 순서에 크게 상관 없지만 통합테스트나 기능 테스트를 수행하는 경우에는 테스트의 순서를 지정하고 싶은 경우가 있다.
테스트 함수의 실행 순서를 제어하기 위해서는 아래와 같이 @TestMethodOrder 어노테이션에 MethodOrderer 구현체를 지정하면 된다. MethodOrderer는 이미 정의된 구현체를 사용해도 되고 직접 구현해도 된다.
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class TestMethodOrderTest {
@Test
@Order(3)
@DisplayName("세번째 테스트")
void test3() {
System.out.println("세번째 테스트");
}
@Test
@Order(1)
@DisplayName("첫번째 테스트")
void test1() {
System.out.println("첫번째 테스트");
}
@Test
@Order(2)
@DisplayName("두번째 테스트")
void test2() {
System.out.println("두번째 테스트");
}
}
사전에 정의된 구현체는 다음과 같은 것들이 있다.
- MethodOrderer.DisplayName: 테스트 메소드를 display 이름의 알파벳 순서로 정렬한다.
- MethodOrderer.MethodName: 테스트 메소드 이름과 형식 매개 변수 목록에 따라 테스트 메소드를 알파벳 순서로 정렬한다.
- MethodOrderer.OrderAnnotation: @Order 어노테이션에 지정된 값에 따라 테스트 메소드를 정렬한다.
- MethodOrderer.Random: 테스트 메소드를 난수로 정렬하고 사용자 정의 시드를 구성할 수 있다.
- MethodOrderer.Alphanumeric: 테스트 메소드 이름과 형식 매개 변수 목록에 따라 테스트 메소드를 알파벳 순서로 정렬한다. MethodOrderer.MethodName가 생기면서 deprecated 되었다. 6.0 부터는 삭제될 것이다.
반응형