【发布时间】: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