如何在JUnit测试方法中读取配置(如Tag、pom的Surefire分组参数)
JUnit测试方法内部读取配置值的实现方法
核心结论
上述两种读取需求都可以落地实现:
- 可以直接在测试方法内部读取当前方法上标注的
@Tag自定义值 - 可以通过简单配置透传,在测试代码中读取maven-surefire-plugin配置的测试分组参数值
一、读取测试方法标注的@Tag值
JUnit5内置了测试元数据注入能力,不需要自定义扩展,直接通过TestInfo对象就能拿到当前测试方法的全量注解、标签信息。
实现步骤
- 修正原测试方法中
@Tag的写法:空括号的@Tag()没有实际作用,需要补上具体的标签值,比如@Tag("base") - 给测试方法添加
TestInfo类型的形参,JUnit运行时会自动注入携带当前测试元数据的实例 - 通过注入的
TestInfo获取当前方法的标签集合,匹配目标值后执行对应逻辑
示例代码
import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestInfo; @Test @Tag("base") public void myTest(TestInfo testInfo) throws Exception { // 获取当前方法绑定的所有标签 String currentTag = testInfo.getTags().stream() .findFirst() .orElse(""); if (currentTag.equals("base")) { // 匹配base标签时的执行逻辑 } else { // 非匹配分支的执行逻辑 } }
二、读取maven-surefire-plugin配置的groups参数值
surefire插件的groups配置值是插件内部用来做测试过滤的参数,默认不会暴露给测试运行的JVM,需要做一次配置透传才能在测试代码中读取。
实现步骤
- 修改pom.xml中maven-surefire-plugin的配置,新增系统属性透传配置,把
groups的配置值传递给测试运行环境 - 在测试方法中通过系统属性API读取透传的分组值
配置与代码示例
pom.xml中插件配置修改:
<configuration> <skipTests>${skipTests}</skipTests> <trimStackTrace>false</trimStackTrace> <groups>base</groups> <!-- 透传分组值到测试JVM的系统属性 --> <systemPropertyVariables> <test.run.group>${groups}</test.run.group> </systemPropertyVariables> </configuration>
测试方法中的读取逻辑:
@Test public void myTest() throws Exception { String configuredGroup = System.getProperty("test.run.group", ""); if (configuredGroup.equals("base")) { // 匹配base分组时的执行逻辑 } else { // 非匹配分支的执行逻辑 } }
注意事项
- 单个测试方法可以标注多个
@Tag,读取到的标签是集合形式,需要根据实际业务取对应的值判断 - 如果业务逻辑是基于当前测试自身的标签做分支判断,优先用
TestInfo读取方法上的Tag值即可,不需要额外透传surefire的配置值,因为surefire本身就是靠匹配@Tag和groups参数来决定测试执行范围的
内容的提问来源于stack exchange,提问作者Meera
相关产品推荐
相关产品推荐

