Cucumber 7.24.0版本无法执行测试,切换7.23.0正常求解决
问题描述
项目使用Cucumber 7.24.0版本,配置Maven依赖如下:
<dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-junit-platform-engine</artifactId> <version>${cucumber.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-java</artifactId> <version>${cucumber.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>io.cucumber</groupId> <artifactId>cucumber-picocontainer</artifactId> <version>${cucumber.version}</version> <scope>test</scope> </dependency>
执行mvn clean verify时测试无法运行,报错信息如下:
There was an error in the forked process [ERROR] TestEngine with ID 'cucumber' failed to discover tests [ERROR] org.apache.maven.surefire.booter.SurefireBooterForkException: There was an error in the forked process [ERROR] TestEngine with ID 'cucumber' failed to discover tests [ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:628) [ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:285) [ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:250) [ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1337) [ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:1135) [ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:969) [ERROR] at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:126) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2(MojoExecutor.java:328) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute(MojoExecutor.java:316) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:174) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.access$000(MojoExecutor.java:75) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor$1.run(MojoExecutor.java:162) [ERROR] at org.apache.maven.buildcache.BuildCacheMojosExecutionStrategy.execute(BuildCacheMojosExecutionStrategy.java:145) [ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:159) [ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:105) [ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:73) [ERROR] at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:53) [ERROR] at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:118) [ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:261) [ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:173) [ERROR] at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:101) [ERROR] at org.apache.maven.cli.MavenCli.execute(MavenCli.java:906) [ERROR] at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:283) [ERROR] at org.apache.maven.cli.MavenCli.main(MavenCli.java:206) [ERROR] at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) [ERROR] at java.base/java.lang.reflect.Method.invoke(Method.java:580) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:255) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:201) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:361) [ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:314)
切换至7.23.0版本时所有测试可正常运行。
原因分析
Cucumber 7.24.0版本对JUnit Platform Engine的兼容性逻辑做了调整,同时引入了与旧版Maven Surefire插件的适配冲突:
- 旧版Surefire插件无法正确识别Cucumber 7.24.0的测试引擎实现,导致测试发现失败
- 版本升级后,Cucumber依赖的JUnit Jupiter等组件版本发生变化,与项目中已有的JUnit依赖产生冲突,破坏了测试引擎的初始化流程
解决方法
- 升级Maven Surefire插件版本:将Surefire插件升级到3.2.5及以上版本,确保其能兼容Cucumber 7.24.0的测试引擎。示例配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>3.2.5</version> </plugin> </plugins> </build>
- 统一JUnit相关依赖版本:通过
mvn dependency:tree命令排查依赖冲突,检查项目中JUnit Jupiter、JUnit Platform等依赖的版本,确保与Cucumber 7.24.0依赖的版本一致,排除冲突的旧版本依赖。 - 临时回退版本:如果上述调整无法解决问题,可暂时回退到Cucumber 7.23.0版本,等待官方修复可能存在的兼容性bug。
- 验证测试扫描规则:确认项目中
.feature文件存放于src/test/resources下、步骤定义类的包结构与feature文件路径对应,虽然回退版本正常说明此问题概率较低,但可作为辅助排查手段。
内容的提问来源于stack exchange,提问作者rakesh
相关产品推荐
相关产品推荐

