首页 > 解决方案 > Cucumber-TestNG:尝试使用pickleEvent.getPickleEvent()时出现“无法解析类型gherkin.events.PickleEvent”错误

问题描述

我最近从 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();
    }

}

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

标签: automated-testscucumbercucumber-jvmgherkin

解决方案


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

然后尝试代码片段而不是PickleEventWrapperCucumberFeatureWrapper

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

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


推荐阅读