3

ステップ定義で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)

また、コンストラクターインジェクションにプロバイダーを使用する必要がありますか?

4

2 に答える 2

5

cucumber-guice v1.2.4の時点で、これはわずかに変更されています。まず、構成ファイルの名前が変更され、現在はになっていcucumber.propertiesます。

次に、モジュールのビルドに加えて、それを拡張してプロパティファイルcucumber.runtime.java.guice.InjectorSourceの値として設定するクラスをビルドする必要があります。guice.injector-sourceしたがって、すでに作成した2つのクラスに加えて、3つ目のクラスを作成する必要があります。

public class MyInjectorSource implements InjectorSource {

       @Override
       public Injector getInjector() {
            return Guice.createInjector(Stage.PRODUCTION, CucumberModules.createScenarioModule(), new MyModule());
       }
}

次に、cucumber.propertiesguice.injector-sourceをこの新しいクラスの完全修飾名に設定します。cucumber.properties以前のように、src/main/resources(またはsrc/test/resources要件に応じて)参加する必要があります。

pom.xml当然、ファイルに依存関係が必要です。

于 2017-01-12T03:46:17.347 に答える
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

于 2012-09-13T13:49:27.847 に答える