2023-04-17
1. 방법
JUnit은 독립된 환경에서의 테스트를 지원하기 때문에 테스트의 순서가 보장되지 않는다. 때문에 동일한 객체 참조가 있을 경우에는 테스트 케이스들의 순서를 보장해주어야 하는 경우가 있는데, 아래의 예제를 보자.
import org.junit.FixMethodOrder;
import org.junit.Test;
public class TestCase1 {
static int number1 = 0;
@Test
public void a1_test(){
number1 += 1;
System.out.println("test1 =================================" + number1);
}
@Test
public void a2_test(){
number1 += 1;
System.out.println("test2 =================================" + number1);
}
@Test
public void a3_test(){
number1 += 1;
System.out.println("test3 =================================" + number1);
}
@Test
public void a4_test(){
number1 += 1;
System.out.println("test4 =================================" + number1);
}
@Test
public void a5_test(){
number1 += 1;
System.out.println("test5 =================================" + number1);
}
}
위의 코드 같은 경우는 순서가 보장되어 있지 않아 a1_test ~ a5_test 어느 것이 먼저 실행될지 알 수 없다.
그래서 JUnit 4에서는 아래와 같은 어노테이션을 지원한다. 해당 어노테이션은 @Test가 선언된 메서드의 문자열 기준으로 오름차순으로 실행하여 실행 순서를 보장해 준다.
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
위의 어노테이션을 적용한 테스트 케이스는 아래와 같다.
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestCase1 {
static int number1 = 0;
@Test
public void a1_test(){
number1 += 1;
System.out.println("test1 =================================" + number1);
}
@Test
public void a2_test(){
number1 += 1;
System.out.println("test2 =================================" + number1);
}
@Test
public void a3_test(){
number1 += 1;
System.out.println("test3 =================================" + number1);
}
@Test
public void a4_test(){
number1 += 1;
System.out.println("test4 =================================" + number1);
}
@Test
public void a5_test(){
number1 += 1;
System.out.println("test5 =================================" + number1);
}
}
실행 결과를 확인해보면 메서드명 기준으로 오름차순 되어 테스트가 실행된 것을 확인할 수 있다.
메인 이미지 출처 : 사진: Unsplash의Philip Oroni