1. 序章

Cucumber は、ビヘイビア駆動開発(BDD)をサポートするテスト自動化ツールです。 システムの動作を説明するプレーンテキストのGherkin構文で記述された仕様を実行します。

このチュートリアルでは、プロジェクトビルドの一部としてBDD仕様を実行するために、CucumberをGradleと統合するいくつかの方法を説明します。

2. 設定

まず、 GradleWrapperを使用してGradleプロジェクトを設定しましょう。

次に、 cucumber-java依存関係をbuild.gradleに追加します。

testImplementation 'io.cucumber:cucumber-java:6.10.4'

これにより、公式のCucumberJava実装がプロジェクトに追加されます。

3. カスタムタスクを使用して実行

Gradleを使用して仕様を実行するために、Cucumber のコマンドラインインターフェイスランナー(CLI)を使用するタスクを作成します。

3.1. 構成

プロジェクトのbuild.gradleファイルに必要な構成を追加することから始めましょう。

configurations {
    cucumberRuntime {
        extendsFrom testImplementation
    }
}

次に、カスタムcucumberCliタスクを作成します。

task cucumberCli() {
    dependsOn assemble, testClasses
    doLast {
        javaexec {
            main = "io.cucumber.core.cli.Main"
            classpath = configurations.cucumberRuntime + sourceSets.main.output + sourceSets.test.output
            args = [
              '--plugin', 'pretty',
              '--plugin', 'html:target/cucumber-report.html', 
              '--glue', 'com.baeldung.cucumber', 
              'src/test/resources']
        }
    }
}

このタスクは、 src / test /resourcesディレクトリの下の.featureファイルにあるすべてのテストシナリオを実行するように構成されています。

Mainクラスの–glue オプションは、シナリオの実行に必要なステップ定義ファイルの場所を指定します。

–plugin オプションは、テストレポートの形式と場所を指定します。 この例のように、いくつかの値を組み合わせて、prettyHTMLなどの必要な形式でレポートを生成できます。

他のいくつかのオプションが利用可能です。 たとえば、名前とタグに基づいてテストをフィルタリングするオプションがあります。

3.2. シナリオ

次に、 src / test / resources / features /account_credited.featureファイルにアプリケーションの簡単なシナリオを作成しましょう。

Feature: Account is credited with amount

  Scenario: Credit amount
    Given account balance is 0.0
    When the account is credited with 10.0
    Then account should have a balance of 10.0

次に、シナリオの実行に必要な対応するステップ定義( glue )を実装します。

public class StepDefinitions {

    @Given("account balance is {double}")
    public void givenAccountBalance(Double initialBalance) {
        account = new Account(initialBalance);
    }

    // other step definitions 

}

3.3. タスクを実行する

最後に、コマンドラインからcucumberCliタスクを実行してみましょう。

>> ./gradlew cucumberCli

> Task :cucumberCli

Scenario: Credit amount                      # src/test/resources/features/account_credited.feature:3
  Given account balance is 0.0               # com.baeldung.cucumber.StepDefinitions.account_balance_is(java.lang.Double)
  When the account is credited with 10.0     # com.baeldung.cucumber.StepDefinitions.the_account_is_credited_with(java.lang.Double)
  Then account should have a balance of 10.0 # com.baeldung.cucumber.StepDefinitions.account_should_have_a_balance_of(java.lang.Double)

1 Scenarios (1 passed)
3 Steps (3 passed)
0m0.381s

ご覧のとおり、仕様はGradleと統合されて正常に実行され、出力がコンソールに表示されます。 また、HTMLテストレポートは指定された場所で利用できます。

4. JUnitを使用して実行する

Gradleでカスタムタスクを作成する代わりに、JUnitを使用してキュウリのシナリオを実行できます。

cucumber-junit依存関係を含めることから始めましょう。

testImplementation 'io.cucumber:cucumber-junit:6.10.4'

JUnit 5を使用しているため、junit-vintage-engine依存関係も追加する必要があります。

testImplementation 'org.junit.vintage:junit-vintage-engine:5.7.2'

次に、テストソースの場所に空のランナークラスを作成します。

@RunWith(Cucumber.class)
@CucumberOptions(
  plugin = {"pretty", "html:target/cucumber-report.html"},
  features = {"src/test/resources"}
)
public class RunCucumberTest {
}

ここでは、@RunWithアノテーションでJUnitCucumberランナーを使用しました。 さらに、機能プラグインなどのすべてのCLIランナーオプションは、@CucumberOptionsアノテーションを介して利用できます。

ここで、 standard Gradleテストタスクを実行すると、他の単体テストに加えて、すべての機能テストが検出されて実行されます。

>> ./gradlew test

> Task :test

RunCucumberTest > Credit amount PASSED

BUILD SUCCESSFUL in 2s

5. プラグインを使用して実行

最後のアプローチは、Gradleビルドから仕様を実行する機能を提供するサードパーティのプラグインを使用することです。

この例では、CucumberJVMを実行するためにgradle-cucumber-runnerプラグインを使用します。 内部的には、これにより、以前に使用したCLIランナーにすべての呼び出しが転送されます。 それを私たちのプロジェクトに含めましょう:

plugins {
  id "se.thinkcode.cucumber-runner" version "0.0.8"
}

これにより、ビルドに cucumber タスクが追加され、デフォルト設定で実行できるようになります。

>> ./gradlew cucumber

これは公式のCucumberプラグインではなく、同様の機能を提供する他のプラグインも利用できることに注意してください。

6. 結論

この記事では、Gradleを使用してBDD仕様を構成および実行するいくつかの方法を示しました。

最初に、CLIランナーを使用してカスタムタスクを作成する方法を確認しました。 次に、Cucumber JUnitランナーを使用して、既存のGradleタスクを使用して仕様を実行する方法を検討しました。 最後に、サードパーティのプラグインを使用して、独自のカスタムタスクを作成せずにCucumberを実行しました。

いつものように、完全なソースはGitHubにあります。