このクイックチュートリアルでは、以下を学習します

  • Cucumberをインストールする
  • 最初のシナリオをGherkin構文で書く
  • 最初のStep定義をで書く
  • Cucumberを実行する
  • 行動駆動開発(BDD)の基本的なワークフローを学ぶ

Cucumberを使用して、金曜日かどうかを判断できる小さなライブラリを開発します。

このチュートリアルでは、以下を前提としていますのでご注意ください

  • 端末を使用するある程度の経験
  • テキストエディタの使用に関するある程度の経験

始める前に、以下が必要です

空のCucumberプロジェクトを作成する

これで、Cucumberがインストールされた小さなプロジェクトができました。

Cucumberのインストールを確認する

すべてが正しく連携するかを確認するために、Cucumberを実行しましょう。

次のように表示されます

Cucumberの出力は、実行するものが何も見つからないことを示しています。

シナリオを書く

Cucumber で行動駆動開発を行うとき、ソフトウェアで行ってほしい具体的な例を使用して何を指定します。シナリオは商品コードより前に記載されます。実行可能な仕様として書かれ始めます。商品コードが明らかになると、シナリオは生きたドキュメント自動テストとして役割を果たします。

例のマッピング

例のマッピングワークショップをチーム内で開催し、例を一緒に設計してみましょう。

Cucumber では、例はシナリオと呼ばれています。.feature ファイルにシナリオを定義します。これらのファイルは ディレクトリ(またはサブディレクトリ)に格納されています。

具体的な例として、日曜日には金曜日は来ないがあります。

次のコンテンツを含んだ、src/test/resources/hellocucumber/is_it_friday_yet.featureという空のファイルを作成します

Feature: Is it Friday yet?
  Everybody wants to know when it's Friday

  Scenario: Sunday isn't Friday
    Given today is Sunday
    When I ask whether it's Friday yet
    Then I should be told "Nope"

このファイルの最初の行はキーワード Feature: から始まり、その後に名前が続きます。ファイル名とよく似た名前を使用することをお勧めします。

2行目は fiturの短い説明です。ドキュメントであるため、Cucumber はこの行を実行しません。

4行目、Scenario: 日曜日に金曜日は来ないは、ソフトウェアがどのように動作する必要があるのかを示す具体的な例であるシナリオです。

Given(前提条件)When(条件)Then(結果)で始まる最後の 3 行は、シナリオのステップです。Cucumber が実行する内容です。

シナリオを定義されていないものとして報告される

シナリオが用意できたので、Cucumber に処理を依頼できます。

Cucumber は、未定義シナリオが 1 つあり、未定義ステップが 3 つあることを示します。また、これらのステップを定義するために使用できるコードのスニペットも示します

未定義ステップのスニペットを 3 つすべてコピーして、src/test/java/hellocucumber/StepDefinitions.java に貼り付けます。

シナリオを処理中として報告される

Cucumber をもう一度実行します。この場合、出力が少し異なります

Cucumber はステップ定義を見つけ、これらを実行しました。現時点では処理中としてマークされています。つまり、役立つ動作をするようにする必要があるということです。

シナリオを失敗として報告される

次のステップは、ステップ定義内のコメントで行う必要があることの実行です

上記の文章を具体的なアクションに変換するコードをここに記述します

ステップと同じ単語をコードに使用してみてください。

普遍的な言語

手順内の語句が例マッピングセッション中の会話から発生した場合、ユビキタス言語を構築しています。これは本番コードとテストをより理解しやすく維持しやすくする素晴らしい方法だと考えています。

手順の定義コードを以下に変更します。

Cucumberをもう一度実行します。

進捗中です。最初の2つの手順はパスしていますが、最後の手順は失敗しています。

シナリオがパスとして報告されているのを見る

シナリオをパスにするために最低限必要な処理を行います。この場合は、メソッドNopeを返すようにする必要があります。

Cucumberをもう一度実行します。

おめでとうございます。最初の緑色Cucumberシナリオができました。

別の失敗するテストを追加します。

次にテストする必要があるのは、それが金曜日のときにも正しい結果を取得できるかどうかです。

is_it_friday_yet.featureファイルを更新します。

Feature: Is it Friday yet?
  Everybody wants to know when it's Friday

  Scenario: Sunday isn't Friday
    Given today is Sunday
    When I ask whether it's Friday yet
    Then I should be told "Nope"

  Scenario: Friday is Friday
    Given today is Friday
    When I ask whether it's Friday yet
    Then I should be told "TGIF"

todayを「Friday」に設定するための手順定義を追加する必要があります。

このテストを実行すると、失敗します。

これは、論理がまだ実装されていないためです。次にそれを行います。

パスするようにします。

today"Friday"と等しいかどうかを実際に評価するために、ステートメントを更新する必要があります。

Cucumberをもう一度実行します。

変数と例を使用する

では、日曜日と金曜日の他にも週には多くの曜日があることを皆さんはご存知でしょう。複数のExamplesを使い始めるとき、シナリオを更新して変数を使用し、より多くの可能性を評価しましょう。変数と例を使用して、金曜日、日曜日、その他すべてを評価します。

is_it_friday_yet.featureファイルを更新します。複数のExamplesを使用すると、ScenarioからScenario Outlineに変化することがわかります。

Feature: Is it Friday yet?
  Everybody wants to know when it's Friday

  Scenario Outline: Today is or is not Friday
    Given today is "<day>"
    When I ask whether it's Friday yet
    Then I should be told "<answer>"

  Examples:
    | day            | answer |
    | Friday         | TGIF   |
    | Sunday         | Nope   |
    | anything else! | Nope   |

today is Sundaytoday is Fridayの手順定義を、文字列として<day>の値を取る1つの手順定義に置き換える必要があります。ファイルを以下のように更新します。

Cucumberをもう一度実行します。

リファクタリング

動作するコードができましたので、いくつかのリファクタリングを実施する必要があります。

  • isItFridayをテストコードから本番コードに移動する必要があります。

  • 今後、いくつかの場所で使用する手順定義からヘルパーメソッドを抽出できます。の場合。

要約

この簡単なチュートリアルでは、Cucumberのインストール方法、BDDプロセスに従ってを開発する方法、およびそのを使用して複数のシナリオを評価する方法を学習しました。

このドキュメントの改善にご協力ください。このページを編集