Behavior-driven-development-and-cucumber
行動駆動開発-キュウリ
Cucumberは、実行可能仕様、テストの自動化、およびLivingドキュメントをサポートするツールです。
振る舞い駆動開発は、例による仕様を拡張します。 また、テスト駆動開発のベストプラクティス、特に外部からの作業の観点を形式化します。 開発作業は、実行可能な仕様に基づいています。
実行可能な仕様の*キー機能*は次のとおりです-
- 実行可能な仕様は-
- システムの動作を表す例から派生。
- ビジネスや利害関係者を含む、開発に関与するすべての人々のコラボレーションで書かれています。
- 受け入れ基準に基づきます。
- 実行可能な仕様に基づいた受け入れテストは自動化されています。
- 共有されたユビキタス言語は、次のような実行可能な仕様と自動テストを記述するために使用されます-
- ドメイン固有の用語は、開発全体で使用されます。
- 顧客や利害関係者を含む全員が、同じ方法でシステム、その要件、実装について話します。
- 要件、設計ドキュメント、コード、テストなどに存在するシステムを議論するために同じ用語が使用されます。
- 誰でも要件を読み、理解し、より多くの要件を生成する方法を理解できます。
- 変更は簡単に対応できます。
- ライブドキュメントが維持されます。
Cucumberは、実行可能仕様とシステムの実際のコードおよび自動化された受け入れテストを結び付けるため、このプロセスを支援します。
これを実際に行う方法は、顧客と開発者が一緒に作業できるように設計されています。 受け入れテストに合格すると、それが表すシステムの動作の仕様が正しく実装されたことを意味します。
典型的なキュウリ受入試験
次の例を考えてください。
機能-サインアップ
- サインアップは迅速かつフレンドリーでなければなりません。
- シナリオ-サインアップの成功
- *新規*ユーザーは、確認メールを受け取り、個人的に挨拶する必要があります。
- *指定*私はサインアップすることを選択しました。
- *いつ*私は有効な詳細でサインアップします。
- *その後*確認メールが届きます。
- *そして*パーソナライズされた挨拶メッセージが表示されるはずです。
この例から、我々はそれを見ることができます-
- 受け入れテストは*機能*を参照してください。
- 機能は*シナリオ*で説明されています。
- シナリオは*ステップ*で構成されています。
仕様は、プレーンテキストファイルの自然言語で記述されていますが、実行可能です。
キュウリの働き
Cucumberは、システムに対して実行できるシナリオを探す機能を含むテキストファイルを処理するコマンドラインツールです。 Cucumberの仕組みを理解しましょう。
- ファイルの命名方法とファイルの場所(それぞれのフォルダー)に関する一連の規則を使用して、簡単に開始できるようにします。
- Cucumberを使用すると、仕様、自動テスト、ドキュメントを同じ場所に保管できます。
- 各シナリオは、シナリオの前提条件、アクション、および事後条件を説明するステップのリストです。各ステップがエラーなしで実行される場合、シナリオは合格としてマークされます。
- 実行の終了時に、Cucumberは合格したシナリオの数を報告します。
- 何かが失敗した場合、開発者が進行できるように、失敗したものに関する情報を提供します。
Cucumberでは、 Features 、 Scenarios 、Stepsは Gherkin と呼ばれる言語で記述されています。
ガーキンは、構造を持つプレーンテキストの英語(または60以上のその他の言語の1つ)です。 ガーキンは習得が容易であり、その構造により、簡潔な方法で例を書くことができます。
- Cucumberは、Gherkinで記述された実行可能な仕様を含むファイルを実行します。
- Cucumberには、プレーンテキストのGherkin Stepsをシステムと対話するアクションに変換するためのStep Definitionsが必要です。
- Cucumberがシナリオ内のステップを実行するとき、実行する一致するステップ定義を探します。
- ステップ定義は、パターンが付加された小さなコードです。
- このパターンは、ステップ定義をすべての一致するステップにリンクするために使用され、コードはガーキンステップが検出されたときにCucumberが実行するものです。
- 各ステップにはステップ定義が付随します。
- ほとんどの手順では、入力を収集し、フレームワークで呼び出しを行うために、アプリケーションドメインに固有のフレームワークに委任します。
Cucumberは、十数種類の異なるソフトウェアプラットフォームをサポートしています。 あなたに合ったCucumber実装を選択できます。 すべてのCucumber実装は同じ全体的な機能を提供し、独自のインストール手順とプラットフォーム固有の機能も備えています。
ステップとステップ定義のマッピング
Cucumberの鍵は、ステップとステップ定義の間のマッピングです。
キュウリの実装
以下にCucumberの実装を示します。
Ruby/JRuby | Ruby/JRuby |
JRuby | JRuby (using Cucumber-JVM) |
Java | Java |
Groovy | Groovy |
NET | .NET (using SpecFlow) |
JavaScript | JavaScript |
JavaScript | JavaScript (using Cucumber-JVM and Rhino) |
Clojure | Clojure |
Gosu | Gosu |
Lua | Lua |
PHP | PHP (using Behat) |
image | Jython |
image:/behavior_driven_development/c.jpg[C] | C++ |
Tcl | Tcl |
フレームワーク統合
以下にフレームワークの実装を示します。
Ruby on Rails | Ruby on Rails |
Selenium | Selenium |
PicoContainer | PicoContainer |
Spring Framework | Spring Framework |
Watir | Watir |