automated-tests - 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 下找不到。
解决方案
对 io.cucumber.cucumber-java 和 cucumber-testng 使用最新版本的依赖项。(我都使用了 6.10.2 版本)
然后尝试代码片段而不是PickleEventWrapper和CucumberFeatureWrapper
@Test(groups = "cucumber", description = "Runs Cucumber Feature", dataProvider = "scenarios")
public void scenario(PickleWrapper pickleWrapper, FeatureWrapper featureWrapper) throws Throwable {
testNGCucumberRunner.runScenario(pickleWrapper.getPickle());
}
它应该工作。我有同样的问题,这解决了我的问题。试试看。
推荐阅读
- assembly - 准将基本 4 套路
- django - Django CharField 中的初始值没有任何影响
- python - tkinter 使框架粘在窗口上
- swift - 无法选择我已添加到屏幕的暂停按钮
- android - Retrofit 2 与 Realm 冲突
- ocaml - 还有另一种更短的方法来写下这段代码吗?(攻击和被攻击函数)
- c# - SignalR/集线器仍在下载
- python-3.x - 我的数据框中有一个数据框
- wordpress - 将 alt 标记添加到滑块 - Wordpress
- amazon-web-services - 我的 Amazon S3 存储桶中的项目可以公开访问。如何限制访问,以便只能从我的应用程序中访问 Bucket 链接?