Java 配置cucumber guice
我试图在步骤定义中使用DI。我有一个模块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); }
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
到myPOM.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()