8

変数があり、この変数をすべてのステップに渡したいと考えています。ステップ間で変数値を渡す方法について、誰でもコードスニペットの例を提案できます。どんな助けでも大歓迎です。

4

2 に答える 2

14

Cucumber for Java (cucumber-jvm) では、ステップ間でデータを共有する目的で、依存関係統合 (DI) コンテナーを使用することを意図しています。そのいくつかは Cucumber に統合されています。

DI の使用方法はコンテナによって若干異なりますが、PicoContainer を使用した例を次に示します。

// MySharedData.java
public class MySharedData {
    public String stringData;
}

// SomeStepDefs.java
public class SomeStepDefs {
    private MySharedData sharedData;

    public SomeStepDefs(MySharedData sharedData) {
        this.sharedData = sharedData;
    }

    // StepDefs omitted
}

// MoreStepDefs.java
public class MoreStepDefs {
    private MySharedData sharedData;

    public MoreStepDefs(MySharedData sharedData) {
        this.sharedData = sharedData;
    }

    // StepDefs omitted
}

DI コンテナーは、シナリオごとに MySharedDataの1 つのインスタンスが作成され、それを必要とするすべてのステップ定義クラスに渡されることを保証します。このアプローチの利点は、挿入された依存関係がシナリオごとに新たに作成されるため、Cucumber がシナリオ間で共有状態がリークしないことを保証することです。

上記の例では、コンストラクター注入を使用しています (したがって、注入された依存関係はコンストラクター パラメーターによって指定されます) が、他の DI コンテナーも、Spring の などの他の注入メカニズムをサポートしてい@Autowiredます。

Cucumber で DI を使用するには、DI 統合の 1 つ (1 つだけ) を選択し、それをクラスパス (または POM) に含める必要があります。次のいずれかを選択します。

  • PicoContainer (cucumber-picocontainer.jar)
  • Guice (cucumber-guice.jar)
  • 溶接 (cucumber-weld.jar)
  • 春 (cucumber-spring.jar)
  • OpenEJB (cucumber-openejb.jar)

Cucumber jar は Cucumber と DI コンテナー間の統合のみを提供するため、選択した DI コンテナー自体もインストールする必要があります。

于 2015-12-30T14:27:23.493 に答える