Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

특정 순서로 JUnit 5 테스트를 실행하는 방법

기본적으로 JUnit은 예측할 수 없는 순서로 테스트 메서드를 실행합니다. 하지만 실무에서는 테스트 간에 의존 관계가 있어 특정 순서대로 실행해야 하는 경우가 종종 있습니다.

예를 들어 사용자 관리 API를 테스트한다고 가정해 보겠습니다. 이때 테스트 시나리오는 다음과 같은 순서로 진행되어야 합니다.

  • 1 — 사용자 생성(Create) 테스트
  • 2 — 사용자 수정(Update) 테스트
  • 3 — 사용자 삭제(Delete) 테스트

사용자를 수정하거나 삭제하려면 대상 사용자가 먼저 존재해야 하므로, 생성 테스트가 반드시 선행되어야 합니다.

JUnit 5에서는 @TestMethodOrder@Order 어노테이션을 함께 사용하여 테스트 실행 순서를 직접 지정할 수 있습니다.

테스트를 순서대로 실행하기

다음은 @Order 어노테이션으로 실행 순서를 제어하는 예제입니다.

import org.junit.jupiter.api.*;

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class TestOrder {

    @Test
    @Order(1)
    public void testCreateUser() {
        // 사용자 생성 테스트 코드
    }

    @Test
    @Order(2)
    public void testUpdateUser() {
        // 사용자 수정 테스트 코드
    }

    @Test
    @Order(3)
    public void testDeleteUser() {
        // 사용자 삭제 테스트 코드
    }
}

클래스 레벨의 @TestMethodOrder(MethodOrderer.OrderAnnotation.class) 선언은 JUnit에게 메서드 레벨의 @Order 값을 기준으로 테스트를 정렬하도록 지시합니다. 위 코드에서는 생성 → 수정 → 삭제 순서로 테스트가 실행됩니다.

참고: 다른 정렬 방식

@TestMethodOrder에는 @Order 외에도 다양한 정렬 전략을 지정할 수 있습니다.

  • MethodOrderer.MethodName.class — 메서드 이름 기준 알파벳순 정렬
  • MethodOrderer.DisplayName.class@DisplayName 값 기준 정렬
  • MethodOrderer.Random.class — 매번 무작위 순서로 실행

다만 테스트가 서로 의존하게 되면 개별 실행이나 병렬 실행 시 문제가 발생할 수 있으므로, 가급적 각 테스트를 독립적으로 설계하는 것이 좋습니다. 실행 순서 지정은 통합 테스트나 E2E 시나리오 테스트처럼 상태 공유가 불가피한 경우에 신중하게 활용하는 것이 바람직합니다.