JUnit 5测试套件在TeamCity服务器上无法识别测试的问题排查
JUnit 5测试套件在TeamCity 2017.2.3中无法检测到测试的解决方案
问题场景
将JUnit 4测试套件升级为JUnit 5版本后,本地IntelliJ中运行正常,但在TeamCity 2017.2.3服务器执行时,报告未找到任何测试。构建日志显示运行时类路径完整,但检测到的类为空。回退到JUnit 4版本的测试套件则可正常识别测试。
当前JUnit 5测试套件代码
package junit.suite; import org.junit.platform.suite.api.SelectClasses; import org.junit.platform.suite.api.Suite; import org.junit.platform.suite.api.SuiteDisplayName; @Suite @SuiteDisplayName( "Full Suite" ) @SelectClasses( { Suite1.class, Suite2.class, Suite3.class, Suite4.class } ) public class FullSuite { }
可正常运行的JUnit 4测试套件代码
package junit.suite; import org.junit.platform.suite.api.SuiteDisplayName; import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith( Suite.class ) @SuiteDisplayName( "Full Suite" ) @Suite.SuiteClasses( { Suite1.class, Suite2.class, Suite3.class, Suite4.class } ) public class FullSuite { }
解决步骤
检查TeamCity对JUnit 5 Suite的支持
TeamCity 2017.2.3属于较旧版本,其自带的JUnit测试运行器对JUnit Platform Suite(即@Suite注解)的支持不完善。即便安装了官方JUnit 5插件,该版本的插件也仅能支持基础JUnit Jupiter测试,无法识别Suite特性。改用构建工具(Maven/Gradle)执行测试
放弃使用TeamCity自带的JUnit runner,直接通过构建工具命令行执行测试任务:- Maven:确保
maven-surefire-plugin版本在2.22.0以上,配置JUnit Platform支持:
在TeamCity构建步骤中选择“命令行”,执行<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.2</version> <dependencies> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-surefire-provider</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.3.2</version> </dependency> </dependencies> </plugin>mvn test -Dtest=FullSuite。 - Gradle:确保Gradle版本在4.6以上,配置JUnit Platform:
构建步骤执行test { useJUnitPlatform() include '**/FullSuite.class' }gradle test。
- Maven:确保
确认依赖完整性
确保项目依赖中包含完整的JUnit Platform Suite相关jar包:junit-platform-suite-apijunit-platform-suite-enginejunit-jupiter-engine
这些依赖需同时存在于编译和运行时类路径中。
启用TeamCity测试调试日志
在TeamCity构建配置的“参数”中添加系统属性-Dteamcity.junit.debug=true,重新运行构建,查看更详细的测试检测日志,定位未找到测试类的具体原因。
内容的提问来源于stack exchange,提问作者Stuart Clark
相关产品推荐
相关产品推荐

