JUnit 순서
JUnit
에서 별도로 순서를 지정안하는 @TestMethodOrder
를 사용하지 않으면 어떤식으로 동작하는지 설명하는 글입니다.
요구사항
- Spring Boot
- JUnit 5
메소드명 뒤에 숫자가 붙은 경우
동일한 메소드명 길이로 뒤에 숫자가 붙은 경우 숫자 순서대로 진행됩니다.
코드
import org.junit.jupiter.api.*;
public class AnnotationTest {
@Test
void test1() {
System.out.println("first");
}
@Test
void test2() {
System.out.println("second");
}
@Test
void test3() {
System.out.println("third");
}
@Disabled
void test4() {
System.out.println("fourth");
}
}
결과
first
second
third
fourth
메소드명 뒤에 알파벳이 붙은 경우
동일한 메소드명 길이로 뒤에 알파벳이 붙은 경우 알파벳 순서대로 진행됩니다.
아래 예제를 보면 작성한 순서 상관없이 testA -> testB -> testC -> testD
순으로 진행되는걸 볼 수 있습니다.
코드
import org.junit.jupiter.api.*;
public class AnnotationTest {
@Test
void testA() {
System.out.println("first");
}
@Test
void testB() {
System.out.println("second");
}
@Test
void testD() {
System.out.println("third");
}
@Test
void testC() {
System.out.println("fourth");
}
}
결과
first
second
fourth
third
메소드명 길이에 따른 순서
이제까지 메소드명이 동일한 길이에서 테스트를 했었는데 이번에는 길이가 다른 메소드명에서 테스트를 진행해보겠습니다.
a -> c -> ac -> ba
길이가 짧은순으로 그 다음 알파벳 순으로 되는걸 확인하실 수 있습니다.
코드
import org.junit.jupiter.api.*;
public class AnnotationTest {
@Test
void a() {
System.out.println("first");
}
@Test
void ba() {
System.out.println("second");
}
@Test
void c() {
System.out.println("third");
}
@Test
void ac() {
System.out.println("fourth");
}
}
결과
first
third
fourth
second
알파벳과 숫자 우선순위
이번에는 알파벳과 숫자 우선순위를 테스트 해보겠습니다.
a1 -> a2 -> b1 -> b2 -> aa -> ab
길이가 짧은순으로 그 다음 알파벳 순으로 되는걸 확인하실 수 있습니다.
import org.junit.jupiter.api.*;
public class AnnotationTest {
@Test
void a1() {
System.out.println("first");
}
@Test
void a2() {
System.out.println("second");
}
@Test
void aa() {
System.out.println("third");
}
@Test
void ab() {
System.out.println("fourth");
}
@Test
void b1() {
System.out.println("fifth");
}
@Test
void b2() {
System.out.println("sixth");
}
}
@Order 사용 예제
- 메소드명 길이
- 숫자
- 알파벳
아마도 추측하기로는 java 컴파일한 바이트코드(bytecode)상으로 우선순위가 높은 순으로 진행되는게 아닌가 추측합니다.
이렇게 예측하기 어렵기 때문에 순서가 필요한 테스트는 가능하면 @Order
를 사용하시기 바랍니다.
@TestMethodOrder(MethodOrderer.MethodName.class)
: 메소드 영숫자순으로 정렬 (a1 -> a2 -> aa -> ab -> b1 -> b2
)@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
: 특정한 순서로 정렬 (a1 -> a2 -> aa -> ab -> b1 -> b2
)
코드
import org.junit.jupiter.api.*;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class AnnotationTest {
@Test
@Order(1)
void a1() {
System.out.println("first");
}
@Test
@Order(2)
void a2() {
System.out.println("second");
}
@Test
@Order(3)
void aa() {
System.out.println("third");
}
@Test
@Order(4)
void ab() {
System.out.println("fourth");
}
@Test
@Order(5)
void b1() {
System.out.println("fifth");
}
@Test
@Order(6)
void b2() {
System.out.println("sixth");
}
}