5

ステップの1つが失敗した場合でも、Cucumberステップの実行を継続する方法はありますか。私の現在のセットアップでは、ステップが失敗すると、キュウリは残りのステップをスキップします....キュウリランナーのセットアップをひねる方法があるかどうか疑問に思います。

失敗したステップをコメントアウトすることはできますが、どのステップが失敗するかわからない場合は実用的ではありません...残りのステップを続行できれば、失敗したテストの完全なセットを1回のショットで知ることができます....サイクルを繰り返すのではなく..。。

環境:Cucumber JVM、R、Java、Ibatis、Spring Framework、Maven

4

3 に答える 3

3

ステップの失敗が不変違反でワールドを離れる可能性があるため、ステップの失敗後にステップの実行を続行することはお勧めできません。より良い戦略は、シナリオの粒度を上げることです。複数の "Then" ステートメントを含む 1 つのシナリオを記述する代わりに、例のリストを使用して、各事後条件を個別にテストします。場合によっては、シナリオの概要と例のリストによって、類似のストーリーが統合されることがあります。https://docs.cucumber.io/gherkin/reference/#scenario-outline

失敗後に特定のステップを続行するようにタグを付ける機能を追加することについて、いくつかの議論があります。https://github.com/cucumber/cucumber/issues/79

于 2013-03-09T16:27:43.820 に答える
0

1 つの方法は、すべてのアサーション エラーをキャッチし、最後のステップでテスト ケースに失敗するか合格するかを決定することです。この場合、任意のステップで n 個を超えるエラーがあるかどうかを確認し、そうである場合はテストに失敗するように調整できます。

これが私がやったことです:

  1. テストケースの @Before で Errors の StringBuffer を初期化します
  2. アサーション エラーをキャッチして StringBuffer に追加し、エラーがスローされてテスト ケースが終了しないようにします。
  3. StringBuffer をチェックして、テスト ケースに失敗するかどうかを判断します。

    StringBuffer verificationErrors;
    
    // Initialize your error SringBuffer here
    
    @Before
    public void initialize() {
        verificationErrors = new StringBuffer();
    }
    // The following is one of the steps in the test case where I need to assert     something
    
    @When("^the value is (\\d+)$")
    public void the_result_should_be(int arg1) {
        try  {
            assertEquals(arg1, 0);
        }
        catch(AssertionError ae) {
            verificationErrors.append("Value is incorrect- "+ae.getMessage());  
        }
    

次のように、@After またはテスト ケースの最後のステップで StringBuffer をチェックして、パスできるか失敗するかを判断します。

if (!(verificationErrors.size()==0)) {
   fail(verificationErrors.toString());
}

唯一の問題は、レポートではすべてのステップが緑色に見えるのに、テスト ケースが失敗したように見えることです。次に、エラー文字列を調べて、どのステップが失敗したかを確認する必要がある場合があります。ステップを簡単に見つけられるように、アサーション エラーが発生したときはいつでも、文字列に追加情報を追加できます。

于 2013-03-09T16:36:46.923 に答える