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

Cucumber测试运行时反复触发io.cucumber.junit.UndefinedStepException异常的求助

解决Cucumber的UndefinedStepException异常

我帮你排查下这个问题,你遇到的io.cucumber.junit.UndefinedStepException通常是因为Cucumber找不到对应的步骤定义类,核心问题出在你的Runner类的glue配置上。

问题分析

你的Runner类里glue = "stepdefination2"这行是错误的:Cucumber的glue参数需要指定的是步骤定义类所在的包路径,而不是类名。如果你的stepdefination2类直接放在项目的根包下(没有自定义包),那应该写glue = ""或者省略,但一般我们都会把步骤定义放在特定包下,比如com.yourproject.stepdefs。

另外,还有几个小细节需要确认:

  • 你的feature文件路径是否正确:features = "src/test/java/nfeature",要确保这个路径下确实存在你的.feature文件
  • 步骤定义的注解和feature里的语句是否完全匹配(你的代码里这个是没问题的,正则和占位符都正确)

修复方案

1. 修正Runner类的glue配置

假设你的stepdefination2类所在的包是com.example.stepdefs(你需要替换成自己实际的包名),修改Runner类:

@RunWith(Cucumber.class)
@CucumberOptions(
    features = "src/test/java/nfeature",
    // 替换成步骤定义类所在的完整包路径
    glue = "com.example.stepdefs"
)
public class TestRun2{
    public void success() {
        System.out.println("test run successfully");
    }
}

如果你的stepdefination2没有放在任何自定义包(直接在默认包),可以改成:

glue = ""

2. 确认feature文件的位置

确保src/test/java/nfeature目录下确实有你的.feature文件,文件名要以.feature结尾,比如login.feature。

3. 检查步骤定义类的注解

你的步骤定义注解是正确的,但注意:

  • @Given("^user navigate to login page$")里的^和$是正则的开始和结束标记,确保feature里的语句完全匹配(你的feature里的语句是对的)
  • @When和@Then的占位符{string}也正确对应feature里的参数

额外建议

  • 尽量不要把类放在默认包下,创建一个专门的包来存放步骤定义,比如stepdefs或者com.yourcompany.automation.stepdefs,这样更清晰也不容易出错
  • 可以在@CucumberOptions里加上monochrome = true,这样控制台输出的测试报告更易读

按照上面的修改后,重新运行测试,应该就能解决UndefinedStepException的问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 13:07:46