[JUnit5] 테스트 작성(4) - Tag
JAVA/JUnit

[JUnit5] 테스트 작성(4) - Tag

@Tag

공통되는 특징을 가지는 테스트들을 묶고 싶을 때가 있습니다.

예를 들어 테스트 실행 시간이 10초 이상 걸리는 테스트들을 느린 테스트로 가정하고, 그 아래로 걸리는 테스트들을 빠른 테스트로 가정해 빠른 테스트들만 실행하려고 합니다. 이런 경우 @Tag가 빛을 발합니다.

public class TaggingAndFilteringTest {
    @DisplayName("느린 테스트 1")
    @Tag("slow")
    @Test
    public void slowTest1(){
        System.out.println("느린 테스트 1 진행");
    }

    @DisplayName("느린 테스트 2")
    @Tag("slow")
    @Test
    public void slowTest2(){
        System.out.println("느린 테스트 2 진행");
    }

    @DisplayName("빠른 테스트 1")
    @Tag("fast")
    @Test
    public void fastTest1(){
        System.out.println("빠른 테스트 1 진행");
    }

    @DisplayName("빠른 테스트 2")
    @Tag("fast")
    @Test
    public void fastTest2(){
        System.out.println("빠른 테스트 2 진행");
    }
}

@Tag("태그명")을 통해 각 메서드들을 태그명 별로 태깅할 수 있습니다.

 

 

커스텀 태그 만들기

일일히 태그명을 쓰기 귀찮은 경우 어노테이션으로 바로 선언하고 싶다면 커스텀 태그를 만드는 것이 좋습니다.

각 커스텀 태그들은 어노테이션을 만드는 방식과 똑같습니다.

@Target(ElementType.METHOD)		// 선언할 수 있는 타입
@Retention(RetentionPolicy.RUNTIME)	// 어느시점까지 어노테이션 메모리를 가져갈 것인가?
@Test					// @Test까지 생략 가능하게끔
@Tag("fast")
public @interface FastTest {
}


@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Tag("slow")
@Test
public @interface SlowTest {
}

이렇게 태그를 만들었으면 윗 코드를 변경해 봅시다.

 

public class TaggingAndFilteringTest {
    @DisplayName("느린 테스트 1")
    @SlowTest
    public void slowTest1(){
        System.out.println("느린 테스트 1 진행");
    }

    @DisplayName("느린 테스트 2")
    @SlowTest
    public void slowTest2(){
        System.out.println("느린 테스트 2 진행");
    }

    @DisplayName("빠른 테스트 1")
    @FastTest
    public void fastTest1(){
        System.out.println("빠른 테스트 1 진행");
    }

    @DisplayName("빠른 테스트 2")
    @FastTest
    public void fastTest2(){
        System.out.println("빠른 테스트 2 진행");
    }
}

 

 

테스트 실행

이렇게 태그를 만든 후 실행하는 방법은 여러 가지가 있습니다. 여기서는 IntelliJ 실행을 살펴봅시다.

실행 설정에서 태그와 태그 명을 입력후...

만든 Run으로 테스트를 실행하면 필터링이 잘 되는 것을 알 수 있습니다.

결과