【问题标题】:Cucumber-TestNG: "The type gherkin.events.PickleEvent cannot be resolved" error when trying to usepickleEvent.getPickleEvent()Cucumber-TestNG:尝试使用pickleEvent.getPickleEvent()时出现“无法解析类型gherkin.events.PickleEvent”错误
【发布时间】:2026-01-31 16:35:01
【问题描述】:

我最近从 info-cukes 转到 io-cucumber 并尝试将每个场景作为单独的测试运行。我尝试使用 testNGCucumberRunner.runScenario(pickleEvent.getPickleEvent())。但是 pickleEvent.getPickleEvent() 突出显示错误“无法解析类型 gherkin.events.PickleEvent。它是从所需的 .class 文件间接引用的”

下面显示的是我添加的依赖项:

<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-java8</artifactId>
    <version>4.8.1</version>
</dependency>

<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-testng</artifactId>
    <version>4.8.1</version>
    <exclusions>
        <exclusion>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>          
        </exclusion>
    </exclusions>
</dependency>

<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-jvm-deps</artifactId>
    <version>1.0.6</version>
    <scope>provided</scope>
</dependency>

<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>gherkin</artifactId>
    <version>13.0.0</version>
</dependency>

<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-core</artifactId>
    <version>4.8.1</version>
</dependency>

<dependency>
    <groupId>io.cucumber</groupId>
    <artifactId>cucumber-gherkin</artifactId>
    <version>5.0.0</version>
</dependency>

下面显示的是我的 TestRunner 类:

import io.cucumber.testng.AbstractTestNGCucumberTests;
import io.cucumber.testng.CucumberFeatureWrapper;
import io.cucumber.testng.CucumberOptions;
import io.cucumber.testng.TestNGCucumberRunner;
import io.cucumber.testng.PickleEventWrapper;
//import gherkin.events.PickleEvent;

import io.cucumber.gherkin.pickles.PickleCompiler;

@CucumberOptions(
        features="<Features_Package_path>"
        ,glue= {"com.crm.bdd.stepdefinitions"}
        ,monochrome = true
        ,dryRun = false
        ,strict = true
        ,tags = {"@RegressionTest", "~@Ignore"}                                                         ,plugin = "json:target/cucumber-reports/CucumberTestReport.json"
)

public class RegressionTestRunner {

    private TestNGCucumberRunner testNGCucumberRunner;

    @BeforeClass(alwaysRun = true)
    public void setUpClasss() throws Exception {
        testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
    }

    @Test(groups = "cucumber", description = "Runs cucumber Scenarios", dataProvider = "scenarios")
    public void scenario(PickleEventWrapper pickleEvent, CucumberFeatureWrapper cucumberFeature) throws Throwable {
        testNGCucumberRunner.runScenario(pickleEvent.getPickleEvent());
    }

    @DataProvider
    public Object[][] scenarios() {
        return testNGCucumberRunner.provideScenarios();
    }

    @AfterClass(alwaysRun = true)
    public void tearDownClass() {
        testNGCucumberRunner.finish();
    }

}

注意:我使用了多个版本的 cucumber-gherkin、gherkin 和所有其他依赖项。我相信小黄瓜罐应该包含 gherkin.events 包。但是我在我尝试过的任何版本中都找不到它。当我执行“import gherkin.events.PickleEvent;”时,错误消失了。但是导入的 gherkin.events.PickleEvent 仍未解决,因为在 gherkin jar 下找不到。

【问题讨论】:

  • 您不需要大部分依赖项。阅读 How to create a Minimal, Reproducible Example 并从头开始阅读 10-minute tutorial 可能会很好。
  • 我怀疑你的 Extent 版本是否与最新的 Cucumber 兼容。
  • 感谢您的回复@M.P.Korstanje。不幸的是,在那 10 分钟的教程中,我没有看到有关 TestRunner 课程的任何详细信息。 ExtentReportUtil 类也是我创建的一个实用程序类。 4.0.6 是我正在使用的范围报告版本
  • 如果你不先把问题变小,你就无法解决它。
  • @M.P.Korstanje 我尝试从 TestRunner 类中删除不需要的依赖项和不需要的代码行。希望这可以帮助。谢谢。

标签: automated-tests cucumber cucumber-jvm gherkin


【解决方案1】:

对 io.cucumber.cucumber-java 和 cucumber-testng 使用最新版本的依赖项。 (我都使用了 6.10.2 版本)

然后尝试使用代码 sn-p 代替 PickleEventWrapperCucumberFeatureWrapper

@Test(groups = "cucumber", description = "Runs Cucumber Feature", dataProvider = "scenarios")
public void scenario(PickleWrapper pickleWrapper, FeatureWrapper featureWrapper) throws Throwable {
    testNGCucumberRunner.runScenario(pickleWrapper.getPickle());
}

它应该工作。我有同样的问题,这解决了我的问题。试一试。

【讨论】:

    最近更新 更多