在 JUnit 5 中,您可以在类或方法级别声明 @Tag 用于过滤测试;类似于 TestNG 中的测试组或 JUnit 4 中的类别
来自javadoc:
标签用于过滤为给定测试执行的测试
计划。例如,开发团队可能会使用诸如
为“fast”、“slow”、“ci-server”等,然后提供标签列表
用于当前的测试计划,可能取决于
当前环境。
例如,您可以使用 "slow" @Tag 声明一个测试类,它将被所有方法继承,并在需要时为某些方法覆盖它:
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
@Tag("slow")
public class FooTest{
//
@Test
void loadManyThings(){
...
}
@Test
void loadManyManyThings(){
...
}
@Test
@Tag("fast")
void loadFewThings(){
...
}
}
您可以对其他测试类应用相同的逻辑。
这样,测试类(和方法)也属于一个特定的标签。
最好不要在整个测试类中复制和粘贴@Tag("fast") 和@Tag("slow"),而是创建自定义组合注释。
例如:
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;
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Tag("slow")
public @interface Slow {
}
并将其用作:
@Test
@Slow
void slowProcessing(){
...
}
要在文本执行期间启用或禁用标有特定标签的测试,您可以依赖maven-surefire-plugin documentation:
要包含标签或标签表达式,请使用groups。
要排除标签或标签表达式,请使用excludedGroups。
只需根据您的要求在您的 pom.xml 中配置插件(文档示例):
<build>
<plugins>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.0</version>
<configuration>
<groups>acceptance | !feature-a</groups>
<excludedGroups>integration, regression</excludedGroups>
</configuration>
</plugin>
</plugins>
</build>
有关信息,test goal documentation 未更新。