필요성 : 기본적으로 테스트는 순서에 의존하지 않고 서로 독립적으로 실행되는 것이 바람직하다. 하지만 보고서를 생성하거나 테스트를 기능 별로 묶고 싶을 때 등, 특정한 순서로 테스트를  실행하는 것이 유용한 경우도 있다.

 

@TestMethodOrder 

  • 이 어노테이션을 통해 테스트 순서를 지정할 수 있다. DisplayName 순서, MethodName 순서, Random 순서, Order 어노테이션에 따른 순서와 같이 다양한 기준을 넣을 수 있다.
  • 이 어노테이션은 테스트하는 클래스 위에 작성한다.
  • MethodOrderer 패키지에 있는 class를 넣으면 된다.
  • 만약 Order 어노테이션으로 지정했다면 각 테스트 메소드 위에 @Order(num)을 적어주면 된다. num이 작을 수록 먼저 실행된다.
  • @Order 어노테이션이 붙은 메소드가 무조건 먼저 실행되며, @Order가 없는 어노테이션은 기본 순서로 동작한다. 같은 num값을 가지는 테스트 메소드 또한 기본 순서로 동작한다.
@TestMethodOrder(OrderAnnotation.class)
class DemoUtilsTest {

    DemoUtils demoUtils;

...

    @Test
    @Order(1) // 가장 먼저 실행
    void add() {
        //execute
        int actual = demoUtils.add(2, 4);

        //assert
        Assertions.assertEquals(6, actual, "2+4 must be 6");
        Assertions.assertNotEquals(7, actual, "2+4 must not be 7");
    }

    @Test
    @Order(2) // 그 다음으로 실행
    void checkNull() {
        //set up
        DemoUtils demoUtils = new DemoUtils();

        String string1 = null;
        String string2 = "choi";

        //execute
        Object obj1 = demoUtils.checkNull(string1);
        Object obj2 = demoUtils.checkNull(string2);

        //assert
        Assertions.assertNull(obj1, "Object must be null");
        Assertions.assertNotNull(obj2, "Object must not be null");
    }

...

}

+ Recent posts