You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Cucumber至3.0.1后TestNG运行器无法找到步骤定义

解决Cucumber 3.0.1升级后场景未定义、测试被跳过的问题

从你描述的情况来看,升级Cucumber版本后出现场景未定义、测试被跳过的问题,主要是因为info.cukes到io.cucumber的迁移带来了API、依赖结构和配置方式的变化。我帮你梳理几个关键的修复点:

1. 清理并优化Maven依赖

你当前的依赖配置存在冗余,而且没有合理设置依赖范围,这可能导致冲突或加载异常:

  • cucumber-jvm是聚合依赖,已经包含了cucumber-core,无需单独引入
  • 测试依赖建议加上scope=test,避免污染主代码依赖

修改后的依赖配置:

<cucumber.version>3.0.1</cucumber.version>

<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-testng</artifactId>
    <version>${cucumber.version}</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-spring</artifactId>
    <version>${cucumber.version}</version>
    <scope>test</scope>
</dependency>

2. 简化TestNG运行器代码

Cucumber 3.x提供了AbstractTestNGCucumberTests基类,已经封装了所有TestNG集成的核心逻辑,你无需手动实现setUpClass、@Test、@DataProvider和tearDownClass,避免因为API变更出错:

修改后的运行器代码:

import io.cucumber.testng.AbstractTestNGCucumberTests;
import io.cucumber.testng.CucumberOptions;

@CucumberOptions(
    plugin = {"pretty", "html:target/cucumber"},
    features = "src/main/java/cucumbertests/features",
    // 改为包路径,自动扫描该包下所有步骤定义类,避免遗漏
    glue = {"cucumbertests.stepdef.customer"} 
)
public class CucumberTestRunner extends AbstractTestNGCucumberTests {
    // 无需额外代码,基类已经处理所有测试执行逻辑
}

3. 关键排查点

除了上面的修改,还要确认以下几点:

  • 步骤定义注解包名:确保你的步骤定义类使用的是io.cucumber.java下的@Given/@When/@Then注解,而不是旧的info.cukes包下的注解——旧注解在新版本中不会被识别,直接导致场景未定义。
  • 依赖残留检查:运行mvn dependency:tree查看是否还有info.cukes的依赖残留,如果有,需要在pom.xml中排除这些旧依赖。
  • 测试类位置:确保CucumberTestRunner放在src/test/java目录下,TestNG默认只会执行该目录下的测试类。
  • Features文件格式:确认.feature文件的语法符合Cucumber 3.x的要求,没有语法错误(比如标签、步骤拼写错误)。

完成这些修改后,重新运行测试,应该就能正常识别场景并执行了。

内容的提问来源于stack exchange,提问作者esmou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:42:40