web-dev-qa-db-ja.com

ステップの定義とフックを拡張するCucumberクラス

Javaの「AbstractBase_step」クラスから拡張したい。したがって、次のようなフックが必要です。

public abstract class AbstractBase_Steps {
    protected Scenario scenario;
    @Before
    public void background(Scenario scenario) {
        this.scenario = scenario;
    }
}

これは、すべてのステップファイルに対して呼び出されます。

public abstract class Hello_Steps extends AbstractBase_Steps {
}

これを行うと、

cucumber.runtime.CucumberException:ステップ定義またはフックを定義するクラスを拡張することは許可されていません。 Hello_StepsクラスはAbstractBase_Stepsクラスを拡張します

誰かがそのためのトリックを持っていますか?

編集:同じステップ定義を再利用するために、新しいクラスCommon_Stepsを作成し、それを接着パスに含めました。したがって、その定義はテスト内のすべての機能ファイルで利用できます。

9
user24502

チェック このディスカッション

お役に立てれば。

6
jmj

私はあなたの問題を理解しているので、ステップのロジックを減らしたいと思っています。これが解決策です。

1)co.com.testのような一般的なパッケージのステップを使用して、この場合はAの共通クラスを定義します

2)基本パッケージを使用するようにステップ構成を定義します

@CucumberOptions(format = {"pretty", "html:target/html/"},
features = {"src/test/resources/acceptance/general/general.feature"},
glue = {"co.com.test"})

3)Aへの特定のステップでクラスBから継承しない

これにより、すべてのパッケージでステップが検索され、共通のステップと特定のステップが見つかります。

@Beforeステップをstepdefinitionで定義してから、基本クラスにメソッドを追加できます。

私のシナリオは、すべての手順の後にキュウリのjvmレポートにメッセージを出力し、複雑さを軽減することです。ここに解決策があります。

ステップ定義:

   @Before
public void after(Scenario scenario) {
    this.scenario = scenario;
}

ベースクラスメソッド:

public static Scenario scenario;

   public Scenario printResponse_Report(Scenario scenario, String responseStr{
      scenario.write("Response body: \n" +responseStr);
      return scenario;
}
0
Nitish Kumar