반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- vscode
- 테스트자동화
- CSS
- math
- Eclipse
- Visual Studio Code
- json
- junit5
- 자바스크립트
- java테스트
- 인텔리제이
- 이클립스
- list
- 문자열
- 배열
- 자바
- html
- 단위테스트
- IntelliJ
- Array
- 정규식
- javascript
- ArrayList
- junit
- HashMap
- string
- js
- input
- Java
- 자바문법
Archives
- Today
- Total
어제 오늘 내일
[JUnit] @TestMethodOrder – 테스트 실행 순서 제어하기 본문
JUnit은 기본적으로 테스트 실행 순서를 보장하지 않습니다.
테스트는 서로 독립적이어야 하므로 순서에 의존하는 테스트는 지양하는 것이 원칙입니다.
하지만 실제 현업 환경에서는 순서가 필요한 경우가 존재합니다.
예를 들어,
- 회원 등록 → 회원 조회 → 회원 삭제
- 초기 설정 테스트 → 기능 테스트
같은 흐름을 그대로 테스트해야 할 때입니다.
이럴 때 사용하는 기능이 바로 @TestMethodOrder입니다.
1. @TestMethodOrder란?
@TestMethodOrder는 테스트 메서드의 실행 순서를 지정하는 애너테이션입니다.
JUnit5에서는 순서 전략을 지정하는 방식으로 작동합니다.
대표적인 두 가지 전략
- MethodOrderer.OrderAnnotation — 개발자가 직접 숫자로 순서 지정
- MethodOrderer.MethodName — 메서드 이름 기준 사전순 실행
일반적으로 OrderAnnotation 방식의 사용 빈도가 가장 높습니다.
2. 숫자 기반 순서 지정: @Order 사용하기
가장 많이 쓰이는 방식으로, 메서드마다 @Order(n)을 붙여 순서를 직접 정의합니다.
예제 코드
import org.junit.jupiter.api.*;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
class UserServiceTest {
@Order(1)
@Test
void testCreateUser() {
System.out.println("1. 사용자 생성");
}
@Order(2)
@Test
void testReadUser() {
System.out.println("2. 사용자 조회");
}
@Order(3)
@Test
void testDeleteUser() {
System.out.println("3. 사용자 삭제");
}
}
설명
- @TestMethodOrder(MethodOrderer.OrderAnnotation.class)로 실행 전략 지정
- @Order(1), @Order(2)처럼 숫자가 작은 테스트부터 실행
- 데이터 흐름을 가지고 있는 테스트 시나리오 구성에 유리
3. 메서드 이름 기반 순서 지정: MethodName 전략
순서를 직접 지정하지 않고 메서드 이름의 사전순으로 정렬하여 실행합니다.
예제 코드
@TestMethodOrder(MethodOrderer.MethodName.class)
class OrderedByNameTest {
@Test
void testB() {
System.out.println("두 번째 실행");
}
@Test
void testA() {
System.out.println("첫 번째 실행");
}
}
설명
- 이름 기준으로 정렬하므로 testA → testB 순으로 실행
- 간단하지만 유지보수 시 이름 변경에 따라 순서가 깨질 수 있으므로 주의
4. @TestMethodOrder 사용 시 주의할 점
- 테스트 독립성이 깨질 수 있음
- 순서에 의존하는 테스트는 한 테스트 실패 시 연속적으로 영향이 발생
- 가능한 한 각 테스트는 독립적으로 동작하도록 설계해야 함
- 데이터 공유 위험
- 순서가 있다는 것은 곧 테스트 간 상태를 공유할 가능성이 있다는 의미
- 상태가 공유되면 테스트 안정성이 떨어지므로 최소화하는 것이 좋음
- 순서 테스트는 "시나리오 테스트" 목적일 때만 사용 추천
- 단위 테스트(Unit Test)보다는 시나리오 흐름을 검증하는 테스트에서 적절
- 여러 사람이 작업할 때 유지보수 어려움
- 순서를 바꾸려고 하면 여러 테스트의 Order 번호를 다시 정리해야 함
- 전략적으로 필요한 경우에만 사용해야 함
5. @TestMethodOrder가 적절한 사용 사례
- CRUD 흐름을 실제 시나리오로 검증하는 인수 테스트 형태
- 외부 시스템과 연동되어 "상태 변화"가 중요한 테스트
- 테스트 데이터가 단계적으로 누적되어야 하는 경우
하지만 이 또한 "최후의 수단"이어야 하며,
가능하면 테스트를 독립적으로 유지하는 것이 가장 좋습니다.
반응형
'IT > JUnit' 카테고리의 다른 글
| [JUnit] suite() 메소드 – 테스트 묶음 구성 패턴 (0) | 2026.01.12 |
|---|---|
| [JUnit] TestSuite 사용법 – 여러 테스트 클래스를 하나로 묶기 (0) | 2026.01.11 |
| [JUnit] @AfterAll – 전체 테스트 종료 후 한 번만 실행되는 작업 (0) | 2026.01.10 |
| [JUnit] @BeforeAll – 테스트 시작 전 한 번만 수행되는 작업 (0) | 2026.01.10 |
| [JUnit] setUp() & tearDown() - 테스트 준비와 정리 단계 이해하기 (0) | 2026.01.09 |
Comments
