본문 바로가기
[IT]/SpringBoot

[Spring Boot] Junit5 테스트 순서 지정

by dop 2021. 4. 18.

테스트를 원하는 순서대로 실행하려면?

@SpringBootTest
@Transactional
public class OrderingTest {

    @Test
    public void a_Test() throws Exception {
        System.out.println("A TEST!");
    }

    @Test
    public void create_Test() throws Exception {
        System.out.println("create TEST!");
    }

    @Test
    public void b_Test() throws Exception {
        System.out.println("B TEST!");
    }

    @Test
    public void c_Test() throws Exception {
        System.out.println("create TEST!");
    }
}

위 코드를 실행하면 다음과 같은 순서로 실행된다.

작성한 순서가 아니다!

클래스 명 순으로 정렬되어 실행되는데... 테스트 순서를 맞춘다고 테스트 명을 정렬해서 지을 순 없다!

Junit5에서는 다음과 같이 Order 어노테이션으로 설정이 가능하다.

@SpringBootTest
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@Transactional
public class OrderingTest {

    @Test
    @Order(1)
    public void a_Test() throws Exception {
        System.out.println("A TEST!");
    }

    @Test
    @Order(2)
    public void create_Test() throws Exception {
        System.out.println("create TEST!");
    }

    @Test
    @Order(4)
    public void b_Test() throws Exception {
        System.out.println("B TEST!");
    }

    @Test
    @Order(3)
    public void c_Test() throws Exception {
        System.out.println("create TEST!");
    }
}

설정한 순서에 따라 실행!

단, Order라는 클래스를 이미 import한 경우에는 해당 클래스로 인식하게 되니 다음과 같이 패키지를 명시하는 방식으로 지정해줘야 한다.

@SpringBootTest
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@Transactional
public class OrderingTest {

    @Test
    @org.junit.jupiter.api.Order(1)
    public void a_Test() throws Exception {
        System.out.println("A TEST!");
    }

    @Test
    @org.junit.jupiter.api.Order(2)
    public void create_Test() throws Exception {
        System.out.println("create TEST!");
    }

    @Test
    @org.junit.jupiter.api.Order(4)
    public void b_Test() throws Exception {
        System.out.println("B TEST!");
    }

    @Test
    @org.junit.jupiter.api.Order(3)
    public void c_Test() throws Exception {
        System.out.println("create TEST!");
    }
}

이방법 이외에 MethodOrderer.OrderAnnotation.class를 사용하면 문자/숫자 조합으로 정렬해준다고 한다.(필자는 아직까지 Order 방식이 편한 것 같다.)

Order방식의 단점은 1,2,3,4 이런식으로 지정하게 되면 중간에 끼워넣고 싶을 때, 끼워넣는 곳 부터 끝까지 모든 수를 증가시켜야하는 불편함이 있기 때문에 1,2,3 보다는 100,200,300 이런식으로 큰 단위로 넘기는게 좋을 것 같다는 생각이 든다.

728x90