努力寻找答案
Caused by: java.lang.NullPointerException: Cannot invoke "io.cucumber.testng.TestNGCucumberRunner.provideScenarios()" because "this.testNGCucumberRunner" is null
at Runner.TestRunner.scenarios(TestRunner.java:36)
FAILED CONFIGURATION: @AfterClass Runner.TestRunner.tearDownClass
java.lang.NullPointerException: Cannot invoke "io.cucumber.testng.TestNGCucumberRunner.finish()" because "this.testNGCucumberRunner" is null
at Runner.TestRunner.tearDownClass(TestRunner.java:41)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at org.testng.internal.invokers.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:139)
at org.testng.
这是我的运行程序文件在过去 10 天中无法执行,使用所有最新的依赖项
@CucumberOptions(
features="src/test/java/features",
glue="sr//test//java//steps"
// plugin={"pretty", "io.qameta.allure.cucumber7jvm.AllureCucumber7Jvm"}
// tags="@Amazon"
)
public class TestRunner {
private TestNGCucumberRunner testNGCucumberRunner;
@BeforeClass(alwaysRun = true)
public void setUpClass() {
testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
}
@Test(groups = "cucumber", description = "Runs Cucumber Scenarios", dataProvider = "scenarios")
public void scenario(PickleWrapper pickle, FeatureWrapper cucumberFeature) {
testNGCucumberRunner.runScenario(pickle.getPickle());
}
@DataProvider
public Object[][] scenarios() {
return testNGCucumberRunner.provideScenarios();
}
@AfterClass(alwaysRun = true)
public void tearDownClass() {
testNGCucumberRunner.finish();
}
}
@DataProvider(@=data)
public Object[][] scenarios() {
return testNGCucumberRunner.data();
}
请提供带有 testng 的 Cucumber 示例工作代码,也尝试过 asbstracttestng ..没有任何效果
实际上,您遇到了一些导致“什么都不起作用”的问题。因此解决一个问题并不会立即给你带来有用的东西。
因此,您要考虑的第一个问题是您有 NPE:
java.lang.NullPointerException: Cannot invoke "io.cucumber.testng.TestNGCucumberRunner.finish()" because "this.testNGCucumberRunner" is null
at Runner.TestRunner.tearDownClass(TestRunner.java:41)
这意味着这里的
testNGCucumberRunner
为空(仔细阅读堆栈跟踪)。
@AfterClass(alwaysRun = true)
public void tearDownClass() {
testNGCucumberRunner.finish();
}
这意味着它从未被初始化,这意味着
new TestNGCucumberRunner
一定在这里抛出了异常:
@BeforeClass(alwaysRun = true)
public void setUpClass() {
testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
}
您没有提到任何其他异常,但如果您向
tearDownClass
添加空检查,您应该在输出中看到它。这个例外可能会提示您其他问题是什么。
@AfterClass(alwaysRun = true)
public void tearDownClass() {
if (testNGCucumberRunner == null) {
return;
}
testNGCucumberRunner.finish();
}