본문 바로가기
Java

[Java] JUnit 5 사용법 (4) - 태깅, 필터링 테스트 (@Tag)

by 노력남자 2022. 9. 6.
반응형

이번 포스팅에선 작성한 테스트 코드를 구분지어 태깅하고 원하는 태그만 필터링해서 테스트할 수 있게해주는 @Tag 어노테이션에 대해 알아보겠습니다.

 

@Tag

 

테스트 클래스, 메소드에 테스트 구분을 태깅하기 위해 사용

 

파라미터명 타입 설명
value String 태그명

 

예시

 

빨리 끝나는 테스트는 fast로 늦게 끝나는 테스트는 slow로 태깅해서 테스트 돌릴 때 각각 실행시켜보겠습니다.

 

빠른 건 @Tag("fast"), 느린 건 @Tag("slow")로 태깅을 했습니다.

 

package com.effortguy.junit5;

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;

public class TagAnnotation {

    @Test
    @Tag("fast")
    void fast_test_1() {
    }

    @Test
    @Tag("fast")
    void fast_test_2() {
    }

    @Test
    @Tag("slow")
    void slow_test_1() {
    }

    @Test
    @Tag("slow")
    void slow_test_2() {
    }
}

 

만약 @Tag("fast"), @Tag("slow") 어노테이션을 추후 테스트 케이스 작성할 때도 계속 사용한다면 어노테이션을 만들어서 사용하는 것도 좋습니다. 이유는 오타 방지할 수 있기 때문입니다.

 

JUnit 5의 어노테이션은 메타 어노테이션으로 사용할 수 있어 별도 어노테이션으로 만들 수 있습니다.

 

@FastTest, @SlowTest 어노테이션을 만들고 적용해보겠습니다.

 

//fast annotation
package com.effortguy.junit5.tag;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;

@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Tag("fast")
@Test
public @interface FastTest {
}

//slow annotation
package com.effortguy.junit5.tag;

import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Tag("slow")
@Test
public @interface SlowTest {
}
package com.effortguy.junit5;

import com.effortguy.junit5.tag.FastTest;
import com.effortguy.junit5.tag.SlowTest;

public class CustomTagAnnotation {

    @FastTest
    void fast_test_1() {
    }

    @FastTest
    void fast_test_2() {
    }

    @SlowTest
    void slow_test_1() {
    }

    @SlowTest
    void slow_test_2() {
    }
}

 

실행

 

@Tag를 붙히고 그냥 테스트를 돌리면 동일하게 나옵니다. 원하는 @Tag만 테스트할려면 별도 설정이 필요합니다.

 

1. 오른쪽 위에 실행 버튼 왼쪽 클릭 -> Edit Configurations 클릭

 

 

2. Test kind를 Tags로 변경 -> Tag expression에 Fast 입력 -> OK

 

Tag expression에 쓸 수 있는 Operator

 

오퍼레이터 설명 예시
! NOT !fast
& AND fast & slow
| OR fast | slow

 

 

3. shift + F10 으로 테스트 실행 (테스트 클래스를 실행하면 안됩니다. ctrl + shift + F10, 코드창에서 실행 X)

 

결과

 

@Tag("fast")가 달린 메소드만 실행된 걸 볼 수 있습니다. 클래스에 달아놨다면 해당 클래스 전부가 실행됩니다.

 

 

 

다음 포스팅에선 테스트를 조건에 따라 반복 테스트할 수 있게 해주는 @RepeatedTest, @ParameterizedTest에 대해서 알아보겠습니다.

 

감사합니다.

 

참고

 

https://junit.org/junit5/docs/current/user-guide/#writing-tests-display-name-generator

반응형

댓글