Maven Surefire插件搭配JUnit5动态测试 如何覆盖默认测试命名规则?
解决方案
你遇到的该问题是旧版本Maven Surefire插件对JUnit5动态测试的显示名支持不完善导致的,可通过以下几种方式解决:
- 方案1:升级Maven Surefire插件至3.0.0-M4及以上版本,该版本开始原生支持读取动态测试的自定义显示名,升级后你示例中的动态测试会正常显示你指定的
aaa名称。插件配置示例如下:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.5</version> </plugin> </plugins> </build>
- 方案2:如果受项目约束无法升级插件,可改用JUnit5参数化测试实现动态用例,参数化测试的自定义名称在旧版本Surefire中兼容性更好,示例代码如下:
public class ProbaTest { @ParameterizedTest(name = "{0}") @ValueSource(strings = {"aaa"}) void test(String testName) { throw new AssertionError("FAIL, as planned"); } }
- 方案3:如果必须保留
@TestFactory的实现方式,可在测试执行逻辑中主动将自定义测试名写入异常信息,即使测试名称显示为tests[1],也可通过错误信息快速定位到对应的动态测试:
public class ProbaTest { @TestFactory public Iterable<DynamicNode> tests() { String testName = "aaa"; return Collections.singleton( DynamicTest.dynamicTest(testName, () -> { throw new AssertionError(testName + " FAIL, as planned"); }) ); } }
内容的提问来源于stack exchange,提问作者skapral
相关产品推荐
相关产品推荐

