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

IntelliJ中Java集成Cucumber运行报错及步骤未执行求助

解决Cucumber集成后的警告与PendingException问题

看起来你遇到了两个核心问题:一个是Java版本兼容引发的反射警告,另一个是步骤未正确实现导致的测试失败。我来帮你逐一梳理解决:

一、关于非法反射访问的警告

这个警告是因为你使用的Cucumber旧版本依赖(cucumber-jvm-deps里的XStream库)和Java 9及以上的模块化系统不兼容——它试图反射访问Java核心类的私有字段,这在新版本Java里被限制了。不过这个警告不会影响测试功能,只是提示未来Java版本会完全禁止这种操作。

解决方法:

  • 优先升级Cucumber依赖到7.x及以上版本。新版本的Cucumber已经替换了XStream或者适配了Java模块系统,不会再出现这个警告。比如在pom.xml里更新依赖:
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-java</artifactId>
        <version>7.14.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>io.cucumber</groupId>
        <artifactId>cucumber-junit</artifactId>
        <version>7.14.0</version>
        <scope>test</scope>
    </dependency>
    
  • 如果暂时不想升级,可以直接忽略这个警告,它不会阻碍测试执行。

二、PendingException与步骤跳过/未实现问题

这是导致测试失败的关键原因,从错误信息看,你的步骤方法里主动抛出了PendingException,而且部分步骤因为匹配失败被跳过。你需要检查以下几点:

1. 移除PendingException抛出

你的步骤方法里有这段代码:

throw new PendingException("TODO: implement me");

Cucumber会把抛出这个异常的步骤标记为pending,并直接跳过后续步骤。如果你想让步骤直接通过,只需要把这段代码删掉,改成空方法即可:

package Steps;

import io.cucumber.java.en.Given;

public class LoginFeature {
    @Given("I navigate to the login page")
    public void iNavigateToTheLoginPage() {
        // 这里可以留空,或者添加简单的日志输出
        System.out.println("Login page navigation step executed");
    }

    // 其他步骤方法也需要移除PendingException
}

2. 确保步骤注解与Feature文本完全匹配

检查Feature文件里的步骤文本(比如I navigate to the login page)和步骤类里的@Given/@When/@Then注解的字符串完全一致,包括大小写、空格、标点符号。哪怕差一个空格,Cucumber都无法匹配,会导致步骤被跳过。

3. 确认Cucumber能扫描到步骤类

如果你的步骤类在Steps包下,要确保Cucumber的配置里指定了正确的glue路径。比如在JUnit测试类里:

import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;

@RunWith(Cucumber.class)
@CucumberOptions(
    features = "src/test/java/Features",
    glue = "Steps" // 这里要和步骤类的包名一致
)
public class TestRunner {
}

如果直接在IntelliJ里运行Feature文件,也要确保项目的Cucumber配置中Glue路径正确。

4. 检查运行配置

确保你运行的是正确的Cucumber配置:要么直接运行Feature文件本身,要么运行配置好的JUnit测试类(带@RunWith(Cucumber.class)的类)。

总结

先处理PendingException的问题,移除步骤方法里的异常抛出,确保步骤注解和Feature文本匹配,这样测试就能正常通过。反射警告可以通过升级Cucumber依赖来彻底解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:36:44