maven-surefire-plugin3配置:显示JUnit5的@DisplayName与TestAbortedException
问题描述
现有一个JUnit5测试类,类及测试方法均标注@DisplayName注解,测试方法中使用assumeTrue断言,当断言不满足时会抛出TestAbortedException。在STS4 IDE中执行该测试类时,可正常显示@DisplayName内容,且中止的测试会输出TestAbortedException的异常信息。但通过Maven命令执行时,无法同时实现这两个效果。已尝试两种配置方案:
- 按照Maven Surefire官方文档中「Surefire Extensions and Reports Configuration for @DisplayName」给出的配置,使用内置扩展,但执行效果与2.x版本插件一致,无法显示
@DisplayName; - 使用第三方扩展
maven-surefire-junit5-tree-reporter,可正常显示@DisplayName,但仍无法输出TestAbortedException的异常信息。
现提出以下技术问题:
- 如何正确配置
maven-surefire-plugin3.x,使其同时显示JUnit5测试的@DisplayName和TestAbortedException信息? - 为何官方文档给出的内置扩展配置无法生效?
解决方案与解释
1. 同时显示@DisplayName和TestAbortedException的配置方案
要同时实现两个效果,需结合官方内置扩展并调整报告输出的日志级别,具体配置如下:
在pom.xml中配置maven-surefire-plugin 3.x版本,启用内置的JUnit5DisplayNameFormatter扩展,同时调整输出参数以捕获中止异常信息:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.5</version> <!-- 使用最新稳定版3.x --> <configuration> <!-- 启用内置的DisplayName格式化扩展 --> <extensions> <extension> <groupId>org.apache.maven.surefire</groupId> <artifactId>surefire-junit5-platform</artifactId> <version>3.2.5</version> <!-- 版本必须与插件完全一致 --> </extension> </extensions> <!-- 配置报告输出,保留中止测试的异常栈 --> <reportFormat>plain</reportFormat> <trimStackTrace>false</trimStackTrace> <!-- 调整系统属性,确保中止异常日志被输出 --> <systemPropertyVariables> <org.junit.platform.reporting.showDisplayName>true</org.junit.platform.reporting.showDisplayName> </systemPropertyVariables> </configuration> </plugin> </plugins> </build>
若控制台仍无法输出异常信息,可在执行Maven命令时添加日志级别参数:
mvn test -Dorg.slf4j.simpleLogger.defaultLogLevel=debug
2. 官方内置扩展配置不生效的常见原因
- 版本不匹配:插件版本与内置扩展
surefire-junit5-platform的版本必须完全一致,否则扩展无法被正确加载激活。 - 配置位置错误:扩展配置必须放在
<configuration>内的<extensions>节点下,而非插件的<dependencies>节点中,两者位置混淆会导致扩展失效。 - 旧依赖残留:若之前使用过2.x版本的Surefire插件,pom中可能残留
surefire-junit47等旧依赖,会干扰JUnit5扩展的初始化,需清理这类旧依赖。 - 报告格式限制:默认的
xml报告格式不会展示@DisplayName,需切换为plain或html格式,才能在控制台或测试报告中看到自定义显示名。
内容的提问来源于stack exchange,提问作者Manuel Jordan
相关产品推荐
相关产品推荐

