@tag 是 junit 5 用于逻辑分组测试的注解,支持多标签、命令行按标签运行或排除(如 -djunit.jupiter.tags="integration" 或 "!slow"),并可通过常量类统一管理标签名以提升可维护性。

@Tag 是 JUnit 5 提供的用于标记测试类或测试方法的注解,它支持对测试用例进行逻辑分组(如 integration、slow、database),并配合构建工具或 IDE 实现选择性运行,避免全量执行耗时或环境依赖强的测试。
如何添加 @Tag 标记
直接在测试类或测试方法上使用 @Tag("xxx") 即可。一个测试可以有多个标签,多个 @Tag 注解可共存:
@Tag("unit")
@Tag("fast")
@Test
void shouldCalculateTotal() {
assertEquals(10, calculator.add(4, 6));
}
@Tag("integration")
@Tag("database")
@Test
void shouldSaveUserToDb() {
userRepository.save(new User("Alice"));
assertNotNull(userRepository.findById(1L));
}
如何运行指定标签的测试
实际运行依赖构建工具配置,常见方式如下:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
Maven 命令行:使用
-Dgroups参数(JUnit 5 中推荐用-Djunit.jupiter.tags)mvn test -Djunit.jupiter.tags="integration" -
Gradle:在
test任务中配置useJUnitPlatform并过滤标签./gradlew test --tests "*integration*"或更规范地:./gradlew test -Djunit.jupiter.tags="database" -
IDEA / Eclipse:右键测试类/方法 → Run As → 选择 “Run with JUnit Platform”,再在运行配置中设置 Tags 字段为
integration等
如何排除特定标签的测试
JUnit 5 支持反向过滤,即跳过带某标签的测试:
- Maven:
mvn test -Djunit.jupiter.tags="!slow"(运行所有非slow标签的测试) - Gradle:
./gradlew test -Djunit.jupiter.tags="!integration" - 代码中也可用
@Tag配合@TestInstance(Lifecycle.PER_CLASS)和自定义条件,但通常命令行过滤更直接
进阶技巧:组合标签与自定义测试策略
标签本身是字符串,不强制预定义,但建议统一管理以提升可维护性:
- 在常量类中定义标签名,避免拼写错误:
public interface TestTags { String UNIT = "unit"; String SMOKE = "smoke"; }
然后@Tag(TestTags.UNIT) - 结合
@EnabledIfSystemProperty或@EnabledIfEnvironmentVariable,实现“仅在 CI 环境运行 integration 标签”等复合控制 - CI 流水线中常用:
mvn verify -Djunit.jupiter.tags="unit" -DskipTests=false快速验证单元测试mvn verify -Djunit.jupiter.tags="integration" -Dmaven.skip.tests=false单独触发集成测试
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










