【问题标题】:Configuring cucumber-guice配置黄瓜guice
【发布时间】:2012-09-13 10:41:39
【问题描述】:

我正在尝试在我的步骤定义中使用 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)

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

【问题讨论】:

    标签: java guice cucumber-jvm


    【解决方案1】:

    从 cucumber-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());
           }
    }
    

    然后在cucumber.properties 中将 guice.injector-source 设置为这个新类的完全限定名。 cucumber.properties 应该像以前一样位于src/main/resources(或src/test/resources,具体取决于您的要求)。

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

    【讨论】:

    • 在我的例子中,我只是使用了cucumber.properties 并在src/test/resources 中设置了guice.injector-source=com.xxx.yyy.inject.MyInjectorSource
    • 是的,对不起 - 我不小心在答案的后半部分写了“guice.properties”。我现在已经更正了。
    • CucumberModules.SCENARIO 现已弃用,请改用CucumberModules.createScenarioModule()
    【解决方案2】:

    MyModuleMyStepDefs 类很好。 NoClassDefFoundError 是由于没有将最新版本的 Guice 添加为依赖项引起的。我添加了这个,

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

    致我的POM.xml

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

    guiceModule=com.felix.cucumber.MyModule

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-17
      • 2015-02-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      相关资源
      最近更新 更多