Java 配置cucumber guice

Java 配置cucumber guice,java,guice,cucumber-jvm,Java,Guice,Cucumber Jvm,我试图在步骤定义中使用DI。我有一个模块 public class MyModule extends AbstractModule { private final static MyInterface INSTANCE = new MyInterfaceImpl(); @Override protected void configure() { bind(MyInterface.class).toInstance(INSTANCE); }

我试图在步骤定义中使用DI。我有一个模块

public class MyModule extends AbstractModule
{
    private final static MyInterface INSTANCE = new MyInterfaceImpl();

    @Override
    protected void configure()
    {
        bind(MyInterface.class).toInstance(INSTANCE);
    }
}
并希望将此实例注入步骤定义的构造函数中

public class MyStepDefs
{
    private final MyInterface instance;

    @Inject
    public MyStepDefs(MyInterface instance)
    {
        this.instance = instance
    }
}
我想我需要使用cucumber-guice.properties文件配置GuiceFactory,但我真的不知道这是什么?目前我得到的错误是

java.lang.NoClassDefFoundError: javax/inject/Singleton
    at cucumber.runtime.java.guice.GuiceFactory$CucumberModule.configure(GuiceFactory.java:86)

我还应该使用提供者进行构造函数注入吗?

MyModule和MyStepDefs类很好。
NoClassDefFoundError
是由于没有将最新版本的Guice作为依赖项添加而导致的。我加了这个,

<dependency>
  <groupId>com.google.inject</groupId>
  <artifactId>guice</artifactId>
  <version>3.0</version>
</dependency>

com.google.inject
圭斯
3
到my
POM.xml

cucumber guice.properties
文件位于
src/main/resources
文件夹中。此文件由
GuiceFactory
类读取,并且应该包含要使用的Guice模块的属性。例如


guiceModule=com.felix.cucumber.MyModule

自cumber guice v1.2.4起,这一点略有变化。首先,配置文件更改了名称,现在是
cucumber.properties

其次,现在除了构建模块外,还必须构建一个扩展
cucumber.runtime.java.guice.InjectorSource
的类,并将其设置为属性文件中
guice.injector source
的值。因此,除了已经创建的两个类之外,还必须创建第三个类:

public class MyInjectorSource implements InjectorSource {

       @Override
       public Injector getInjector() {
            return Guice.createInjector(Stage.PRODUCTION, CucumberModules.createScenarioModule(), new MyModule());
       }
}
然后在
cumber.properties
中将guice.injector-source设置为这个新类的完全限定名
cumber.properties
应该像以前一样位于
src/main/resources
(或者
src/test/resources
,具体取决于您的需求)


当然,您仍然需要在
pom.xml
文件中使用依赖项。

在我的例子中,我只是使用
cucumber.properties
并在
src/test/resources中设置
guice.injector source=com.xxx.yyy.injector.MyInjectorSource
是的抱歉-我在回答的下半部分意外地写了“guice.properties”。我现在已经更正了。
CucumberModules.SCENARIO
现在已被弃用,请改用
CucumberModules.createScenarioModule()