java-8 – 始终使用Cucumber-Java8获取异常“常量池索引的错误类
我正在设计一个用于
Java8方言的示例项目.我的问题是,我没有得到它运行.我总是得到以下异常层次结构:
Tests run: 1,Failures: 0,Errors: 1,Skipped: 0,Time elapsed: 0.068 sec <<< FAILURE! - in soy.wimmer.CucumberIT Feature: Cucumber with Java8 Time elapsed: 0.051 sec <<< ERROR! cucumber.runtime.CucumberException: Failed to instantiate class soy.wimmer.CucumberStepdefs […] Caused by: java.lang.reflect.InvocationTargetException: null […] Caused by: cucumber.runtime.CucumberException: java.lang.IllegalArgumentException: Wrong type at constant pool index […] Caused by: java.lang.IllegalArgumentException: Wrong type at constant pool index at sun.reflect.ConstantPool.getMemberRefInfoAt0(Native Method) at sun.reflect.ConstantPool.getMemberRefInfoAt(ConstantPool.java:47) at cucumber.runtime.java8.ConstantPoolTypeIntrospector.getTypeString(ConstantPoolTypeIntrospector.java:37) at cucumber.runtime.java8.ConstantPoolTypeIntrospector.getGenericTypes(ConstantPoolTypeIntrospector.java:27) at cucumber.runtime.java.Java8StepDefinition.<init>(Java8StepDefinition.java:45) at cucumber.runtime.java.JavaBackend.addStepDefinition(JavaBackend.java:162) at cucumber.api.java8.En.Given(En.java:190) at soy.wimmer.CucumberStepdefs.<init>(CucumberStepdefs.java:8) […] Results : Tests in error: Failed to instantiate class soy.wimmer.CucumberStepdefs Tests run: 1,Skipped: 0 我不知道为什么我得到这个错误,也不知道如何解决它. 我把所有东西都包装在Maven项目中.布局是这样的: ./src/test/java/soy/wimmer/CucumberIT.java ./src/test/java/soy/wimmer/CucumberStepdefs.java ./src/test/resources/cucumber/cucumber-java8.feature ./pom.xml 我在pom.xml中包含的依赖关系是: <dependencies> <dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-java8</artifactId> <version>1.2.3</version> <scope>test</scope> </dependency> <dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-junit</artifactId> <version>1.2.3</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> 另外,pom.xml仅加载编译器和故障安全插件. 我的CucumberIT.java定义: package soy.wimmer; import cucumber.api.CucumberOptions; import cucumber.api.junit.Cucumber; import org.junit.runner.RunWith; @RunWith(Cucumber.class) @CucumberOptions(features = "classpath:cucumber") public class CucumberIT { } 我的功能定义: Feature: Cucumber with Java8 As a developer I want to use Cucumber-java8 So that I have nicer step definitions Scenario: Let's try it Given I have some dummy code When I try to test it Then it should work with cucumber-java8 这是我的步骤定义: package soy.wimmer; import cucumber.api.PendingException; import cucumber.api.java8.En; public class CucumberStepdefs implements En { public CucumberStepdefs() { Given("^I have some dummy code$",() -> { // Write code here that turns the phrase above into concrete actions throw new PendingException(); }); When("^I try to test it$",() -> { // Write code here that turns the phrase above into concrete actions throw new PendingException(); }); Then("^it should work with cucumber-java(d+)$",(Integer arg1) -> { // Write code here that turns the phrase above into concrete actions throw new PendingException(); }); } } 任何想法我在这里做错什么? 解决方法
这个问题是因为Java8的Cucumber方言使用了Oracle JDK8的实现细节.
我正在使用Debian打包的OpenJDK8,这导致不断的池的不同组织.当我尝试与Oracle的JDK8相同时,一切都按预期工作. 如果您想自己尝试,我在github:https://github.com/mawis/cucumber-java8-test上发布了完整的示例项目 我还在黄瓜jvm的问题跟踪器上报了一个错误:https://github.com/cucumber/cucumber-jvm/issues/912 您可以检查问题跟踪器,看看是否会在以后修复问题. 现在如果你想使用cucumber-java8,你似乎必须使用Oracle的JDK实现. (解决这个问题的名声属于霍格尔,他对这个问题的评论,我只是想把这个答案写成总结) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |