JUnit5 태그 필터링 - @Tag
태그 필터링
테스트에 @Tag
를 지정하여, 입력한 Tag명에 따라, 테스트는 실행할 수 있는 기능에 대해서 알아보겠다.
태그 지정
@Tag
는 테스트 클래스 또는 메소드에 추가하여 테스트 케이스에 태그를 지정할 수 있다.
package com.devkuma.junit5.tag;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
public class TagTest {
@Test
@Tag("tag1")
@Tag("tag3")
void test1() {
System.out.println("test1@(tag1, tag3)");
}
@Test
@Tag("tag2")
@Tag("tag3")
void test2() {
System.out.println("test2@(tag2, tag3)");
}
@Test
@Tag("tag3")
void test3() {
System.out.println("test3@(tag3)");
}
@Test
@Tag("tag4")
void test4() {
System.out.println("test4@(tag4)");
}
}
위에 테스트 코드에서는 아래와 같이 태그를 지정하였다.
test1() |
test2() |
test3() |
test4() |
|
---|---|---|---|---|
tag1 |
O | |||
tag2 |
O | |||
tag3 |
O | O | O | |
tag4 |
O |
ConsoleLauncher에서 실행
ConsoleLauncher은 CLI 옵션으로 --include-tag
를 조건으로 일치하거나 일치하지 않는 태크만 타겟킹할 수 있다.
일반적으로 테스트를 실행해 보면, 모든 테스트가 실행이 된다.
$ java -jar junit-platform-console-standalone-1.9.1.jar \
-cp build/classes/java/test \
--select-class com.devkuma.junit5.tag.TagTest \
-e junit-jupiter
실행 결과:
test1@(tag1, tag3)
test3@(tag3)
test4@(tag4)
test2@(tag2, tag3)
--include-tag
옵션을 넣고 실행시켜 보면, 해당 Tag의 테스트만 실행된다.
Tag가 "tag3"
인 경우만 실행한다.
% java -jar junit-platform-console-standalone-1.9.1.jar \
-cp build/classes/java/test \
--select-class com.devkuma.junit5.tag.TagTest \
-e junit-jupiter \
--include-tag "tag3"
실행 결과:
test1@(tag1, tag3)
test3@(tag3)
test2@(tag2, tag3)
Tag가 "tag1"
이고, "tag3"
인 경우만 실행한다.
% java -jar junit-platform-console-standalone-1.9.1.jar \
-cp build/classes/java/test \
--select-class com.devkuma.junit5.tag.TagTest \
-e junit-jupiter \
--include-tag "tag1 & tag3"
실행 결과:
test1@(tag1, tag3)
Tag가 "tag1"
이거나, "tag3"
인 경우만 실행한다.
% java -jar junit-platform-console-standalone-1.9.1.jar \
-cp build/classes/java/test \
--select-class com.devkuma.junit5.tag.TagTest \
-e junit-jupiter \
--include-tag "tag1 | tag2"
실행 결과:
test1@(tag1, tag3)
test2@(tag2, tag3)
Tag가 "tag1"
이 아니고 "tag3"
인 경우만 실행한다.
% java -jar junit-platform-console-standalone-1.9.1.jar \
-cp build/classes/java/test \
--select-class com.devkuma.junit5.tag.TagTest \
-e junit-jupiter \
--include-tag "\!tag1 & tag3"
실행 결과:
test3@(tag3)
test2@(tag2, tag3)
Tag가 "tag1"
이거나, "tag3"
이 아닌 경우만 실행한다.
% java -jar junit-platform-console-standalone-1.9.1.jar \
-cp build/classes/java/test \
--select-class com.devkuma.junit5.tag.TagTest \
-e junit-jupiter \
--include-tag "tag1 | \!tag3"
실행 결과:
test1@(tag1, tag3)
test4@(tag4)
Tag가 괄호()
로 조건을 정리하는 것도 가능하다.
% java -jar junit-platform-console-standalone-1.9.1.jar \
-cp build/classes/java/test \
--select-class com.devkuma.junit5.tag.TagTest \
-e junit-jupiter \
--include-tag "(\!tag1 & tag3) | tag4"
실행 결과:
test2@(tag2, tag3)
test3@(tag3)
test4@(tag4)
- 태그 이름에 지정하는 문자열은 다음 조건을 충족해야 한다.
null
또는 빈 문자가 아니어야 한다.- 공백 문자를 포함하지 않는다.
- 제어 문자를 포함하지 않는다.
- 다음 예약된 문자를 포함하지 않는다.
(
,)
,,
,&
,|
,!
- 태그는 런타임에 지정한 조건으로 필터링할 수 있다.
빌드 실행
Gradle에서 실행하는 경우는 다음과 같은 느낌으로 지정한다.
build.gradle
// ...
test {
useJUnitPlatform {
includeTags "tag1 | !tag3"
}
}
- includeTags 또는 excludeTags 로 지정할 수 있다.
- 태그를 좁히는 조건은 전용 태그식 으로 기술할 수 있다.
- 태그 표현식에서는 연산자를 사용하여 복잡한 조건을 작성할 수 있다.
!
: 아니다&
: 그리고|
: 또는
IntelliJ IDEA 실행
IntelliJ IDEA에서 Tag를 실행을 하려면 먼저, JUnit 실행 항목을 만들어야 한다.
먼저, 실행 구성 수정 버튼을 누른다.
“Run/Debug Configurations” 팝업이 표시되면, 추가 버튼(+)를 누르고 “JUnit” 항목을 선택한다.
Name를 입력하고, Tags 선택하고, 태크명을 지정한다.
그러고, 실행을 해보면, 지정한 태그명("tag3"
)인 테스트만 실행된 것을 확인 할 수 있다.