Junit에서 테스트 클래스에 테스트 메서드를 여러 개 만들고 테스트를 실행하면 테스트 메서드는 랜덤으로 실행됩니다.
하지만 테스트의 실행 순서를 원하는대로 변경할 수 있는데요. 그 방법에 대해 알아보겠습니다.
아래처럼 테스트 클래스를 작성하면 순서는 어떻게 될까요?
public class OrderChangeTest {
@Test
@DisplayName("회원가입")
void signUp() {
System.out.println("회원가입");
}
@Test
@DisplayName("로그인")
void signIn() {
System.out.println("로그인");
}
@Test
@DisplayName("패스워드변경")
void changePassword() {
System.out.println("패스워드변경");
}
@Test
@DisplayName("회원탈퇴")
void secession() {
System.out.println("회원 탈퇴");
}
@BeforeAll
static void beforeAll() {
System.out.println("before all");
}
@AfterAll
static void afterAll() {
System.out.println("after all");
}
}

테스트 메서드를 작성한 순서대로 회원가입 -> 로그인 -> 패스워드변경-> 회원탈퇴 순으로 실행될거라고 예상됐지만 그렇지 않습니다.
이번에는 JUnit에서 제공하는 어노테이션을 사용해서 테스트 실행 순서를 원하는대로 변경해보겠습니다.
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class OrderChangeTest {
@Test
@DisplayName("회원가입")
@Order(1)
void signUp() {
System.out.println("회원가입");
}
@Test
@DisplayName("로그인")
@Order(2)
void signIn() {
System.out.println("로그인");
}
@Test
@DisplayName("패스워드변경")
@Order(3)
void changePassword() {
System.out.println("패스워드변경");
}
@Test
@DisplayName("회원탈퇴")
@Order(4)
void secession() {
System.out.println("회원 탈퇴");
}
@BeforeAll
static void beforeAll() {
System.out.println("before all");
}
@AfterAll
static void afterAll() {
System.out.println("after all");
}
}

@TestMethodOrder와 @Order 어노테이션을 활용하면 됩니다.
@Order 어노테이션은 스프링이 제공하는 어노테이션이 아닌 JUnit이 제공하는 어노테이션을 사용해야 합니다.
참고로 스프링이 제공하는 @Order 어노테이션은 Bean을 생성하는 순서를 지정하는 역할을 합니다.
참고
백기선님의 더 자바, 애플리케이션을 테스트하는 다양한 방법을 듣고 정리한 내용입니다.