본문 바로가기

Java

JUnit5 테스트 순서 지정하기

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 부터는 삭제될 것이다.
반응형