Java 在junit中运行黄瓜时出错
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/23559259/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Error while running cucumber in junit
提问by Mrunal Gosar
Hi i am new to cucumber java. i am trying to run a simple cucumber feature test. below are my feature file, step definition file and junit runner file. but i am not able to run the test succesfully in cucumber-java,cucumber-junit 1.1.6 version.
嗨,我是黄瓜 Java 的新手。我正在尝试运行一个简单的黄瓜功能测试。下面是我的特征文件、步骤定义文件和 junit 运行文件。但我无法在cucumber-java,cucumber-junit 1.1.6 版本中成功运行测试。
Feature file
特征文件
Feature: Test if f1 feature is working
Scenario: valid scenario
Given input1 is "t"
When input2 is also "t"
Then result should be "pass"
Stepdefinition file
步骤定义文件
package cucumberFrameworkPractise;
import org.junit.Assert;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.Then;
import cucumber.api.java.en.When;
public class CucumberStepDefinitionTest {
String input1,input2,result;
@Given("input1 is \"([^\"]*)\"$")
public void input1(String input1)
{
this.input1=input1;
}
@When("input2 is also \"([^\"]*)\"$")
public void input2(String input2)
{
this.input2=input2;
}
@Then("result should be \"([^\"]*)\"$")
public void result(String result)
{
this.result=result;
Assert.fail();
}
}
Cucumber runner file
黄瓜赛跑档案
package cucumberFrameworkPractise;
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(features = "src/test/resources/cucumberFrameworkPractise", format = {
"pretty", "html:target/cucumber-htmlreport",
"json-pretty:target/cucumber-report.json" })
public class CucumberRunner {
}
I am getting below error:
我收到以下错误:
java.lang.NoSuchMethodError: cucumber.runtime.RuntimeOptions.<init>(Ljava/util/List;)V
at cucumber.runtime.RuntimeOptionsFactory.create(RuntimeOptionsFactory.java:24)
at cucumber.api.junit.Cucumber.<init>(Cucumber.java:58)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:29)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:21)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
POM.xml
POM文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mrunal</groupId>
<artifactId>cucumbertest</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.1</version>
<executions>
<execution>
<id>default-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.0.14</version>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.0.14</version>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-testng</artifactId>
<version>1.1.5</version>
</dependency>
</dependencies>
</project>
But when i am running with 1.0.14 version of the same i am able to run it successfully. whys is it so? does 1.1.6 version has some bug in it to run? TIA!!!
但是当我使用相同的 1.0.14 版本运行时,我能够成功运行它。为什么会这样?1.1.6 版本是否有一些错误可以运行?蒂亚!!!
采纳答案by Aaron Digulla
The error means that cucumber.runtime.RuntimeOptions
has no constructor which takes a List
as argument.
错误意味着cucumber.runtime.RuntimeOptions
没有将 aList
作为参数的构造函数。
Since all classes are part of cucumber, I suspect a bug in the release. Run mvn dependency:tree
and search the output for cucumber
. Make sure that you have only a single version of the dependency.
由于所有类都是黄瓜的一部分,我怀疑发布中存在错误。运行mvn dependency:tree
并搜索输出cucumber
。确保您只有一个版本的依赖项。
If your classpath is good, try an older version.
如果您的类路径不错,请尝试使用旧版本。
If that works, download the sources for cucumber and compile them. Does it work now? If so, open a bug report telling the Cucumber project that the latest release wasn't compile correctly.
如果可行,请下载 Cucumber 的源代码并编译它们。现在有效吗?如果是这样,打开一个错误报告,告诉 Cucumber 项目最新版本没有正确编译。
回答by Sakthi
In Simple term, We need same jar version for cucumber-core,cucumber-java,cucumber-junit. To overcome this issue :)
简单来说,我们需要为cucumber-core、cucumber-java、cucumber-junit 使用相同的jar 版本。为了克服这个问题:)
Error, we are getting because of the jar files and corresponding version(not suitable for our JDK). I played with jar file - now issue is resolved. And also able to run and generate output.
错误,我们是因为 jar 文件和相应版本(不适合我们的 JDK)而得到的。我玩过 jar 文件 - 现在问题解决了。并且还能够运行和生成输出。
My JDK version- 1.8.0_60 JARS, junit -4.12 cucumber-java-1.2.2.jar cucumber-junit-1.2.2.jar cucumber-core-1.2.2.jar gherkin-2.12.2.jar cucumber-jvm-deps-1.0.3.jar
我的JDK版本- 1.8.0_60 JARS,junit -4.12黄瓜-java-1.2.2.jar黄瓜-junit-1.2.2.jar黄瓜-核心-1.2.2.jar小黄瓜-2.12.2.jar黄瓜-jvm- deps-1.0.3.jar
Note: java,junit,core should be in same version. Remove unwanted cucumber jars. Debug by install only two(Java and Junit) jar files(different version) and try to resolve NoSuchMethod error.
注意:java,junit,core 应该是同一个版本。取出不需要的黄瓜罐。通过仅安装两个(Java 和 Junit)jar 文件(不同版本)进行调试并尝试解决 NoSuchMethod 错误。
回答by zagoo2000
I'm new and still learning. I had a similar 'cucumber runner initialization error' message:
我是新手,还在学习。我有一个类似的“黄瓜运行程序初始化错误”消息:
java.lang.NoSuchMethodError: cucumber.runtime.RuntimeOptionsFactory.<init>(Ljava/lang/Class;[Ljava/lang/Class;)V
at cucumber.api.junit.Cucumber.<init>(Cucumber.java:59)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:29)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:21)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createUnfilteredTest(JUnit4TestLoader.java:87)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:73)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:46)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:522)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
Referenced Libraries<= My Jars when I was having an error. I then replaced my cucumber-junit-1.1.5.jar with cucumber-junit-1.2.2.jar and the error message is now resolved. I can now run my cucumber junit test. I started with the latest jars but they seems to have issues. I then tried several different combination. I read 'rule of thumb' (also mentioned above) that the three jars (-core, -java and -junit) need to be of same version. Only then I was able to run my feature files and junit tests.
出现错误时,引用的库<= 我的罐子。然后我用cucumber-junit-1.2.2.jar 替换了我的cucumber-junit-1.1.5.jar,错误信息现在解决了。我现在可以运行我的黄瓜 junit 测试了。我从最新的罐子开始,但它们似乎有问题。然后我尝试了几种不同的组合。我读过“经验法则”(上面也提到过),三个 jar(-core、-java 和 -junit)需要具有相同的版本。只有这样我才能运行我的功能文件和 junit 测试。
My current working jars are:
我目前的工作罐子是:
gherkin-2.12.2
cucumber-core-1.2.2
cucumber-java-1.2.2
cucumber-junit-1.2.2
cucumber-html-0.2.3
cucumber-jvm-deps-1.0.3
hamcrest-all-1.3
junit-4.11
selenium-server-standalone-3.13.0
I hope this helps.
我希望这有帮助。
回答by Abhinav Handa
Check your dependencies: Cucumber dependencies should be all aligned:
检查您的依赖项:Cucumber 依赖项应该全部对齐:
<!-- https://mvnrepository.com/artifact/info.cukes/cucumber-jvm -->
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-jvm</artifactId>
<version>1.2.2</version>
<type>pom</type>
</dependency>
<!-- https://mvnrepository.com/artifact/info.cukes/cucumber-java -->
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.2.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/info.cukes/cucumber-core -->
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-core</artifactId>
<version>1.2.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/info.cukes/cucumber-junit -->
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.2.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/info.cukes/cucumber-jvm-deps -->
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-jvm-deps</artifactId>
<version>1.0.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>