2012-09-13 76 views
2

我想在我的步驟定義中使用DI。我有一個模塊,配置黃瓜guice

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) 

我也應該使用提供商的建設者注射?

回答

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模塊的屬性。 EG ..

guiceModule=com.felix.cucumber.MyModule

3

黃瓜,吉斯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.SCENARIO, new MyModule()); 
     } 
} 

然後在cucumber.properties集guice.injector源到這個新類的完全限定名。 cucumber.properties應該像以前一樣在src/main/resources(或根據您的要求src/test/resources)。

當然,您仍然需要依賴於您的pom.xml文件。

+0

在我來說,我只是用'cucumber.properties'並設置 'guice.injector源= com.xxx.yyy.inject.MyInjectorSource'內'的src /測試/ resources' –

+0

呀對不起 - 我不小心寫了「 guice.properties'在我的答案的後半部分。我現在糾正了它。 –