이번 포스팅에선 작성한 테스트 코드를 구분지어 태깅하고 원하는 태그만 필터링해서 테스트할 수 있게해주는 @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
댓글