Behavior-driven-development-and-specflow
行動駆動開発-SpecFlow
SpecFlowはオープンソースプロジェクトです。 ソースコードはGitHubでホストされています。 アプリケーションの機能(ユースケース、ユーザーストーリー)の受け入れ基準を保存するためにSpecFlowが使用する機能ファイルは、Gherkin構文を使用して定義されます。
Gherkin形式はCucumberによって導入され、他のツールでも使用されています。 Gherkin言語はGitHubのプロジェクトとして維持されています-https://github.com/cucumber/gherkin
機能要素とSpecFlow
機能要素の主要な機能は次のとおりです-
- 機能要素は、機能ファイルのヘッダーを提供します。 機能要素には、アプリケーションの対応する機能の名前と高レベルの説明が含まれます。
- SpecFlowは、機能の名前から派生したクラス名を使用して、機能要素の単体テストクラスを生成します。
- SpecFlowは、受け入れ基準を表すシナリオから実行可能な単体テストを生成します。
- 機能ファイルには、機能の受け入れテストを記述するために使用される複数のシナリオが含まれる場合があります。
- シナリオには名前があり、複数のシナリオステップで構成できます。
- SpecFlowは、シナリオの名前から派生したメソッド名を使用して、各シナリオの単体テストメソッドを生成します。
複数のシナリオステップ
シナリオには複数のシナリオステップを含めることができます。 受け入れテストを構成する前提条件、アクション、または検証ステップを定義する3つのタイプのステップがあります。
- 異なるタイプのステップはそれぞれ Given、When または Then キーワードで始まり、同じタイプの後続のステップは And および But キーワードを使用してリンクできます。
- Gherkin構文では、これら3つのタイプのステップを任意に組み合わせて使用できますが、通常、シナリオには Given、When 、および Then ステートメントの別個のブロックがあります。
- シナリオのステップはテキストを使用して定義され、DataTableと呼ばれる追加のテーブルまたはDocString引数と呼ばれる複数行のテキストを持つことができます。
- シナリオの手順は、カスタムコードを実行してアプリケーションを自動化する主な方法です。
- SpecFlowは、各シナリオステップの単体テストメソッド内で呼び出しを生成します。 呼び出しは、シナリオステップに一致するステップ定義を実行するSpecFlowランタイムによって実行されます。
- マッチングは実行時に行われるため、バインディングがまだ実装されていなくても、生成されたテストをコンパイルして実行できます。
- シナリオのステップにテーブルと複数行の引数を含めることができます。 これらはステップ定義で使用され、追加のテーブルまたは文字列引数として渡されます。
Tags
タグは、機能とシナリオに割り当てることができるマーカーです。 機能にタグを割り当てることは、機能ファイル内のすべてのシナリオにタグを割り当てることと同等です。 先頭に@が付いたタグ名はタグを示します。
- 単体テストフレームワークでサポートされている場合、SpecFlowはタグからカテゴリを生成します。
- 生成されたカテゴリ名はタグの名前と同じですが、先頭に@はありません。
- これらの単体テストカテゴリを使用して、実行するテストをフィルタリングおよびグループ化できます。 たとえば、重要なテストに@importantをタグ付けしてから、これらのテストをより頻繁に実行できます。
背景要素
バックグラウンド言語要素により、機能ファイルのすべてのシナリオに共通の前提条件を指定できます
- ファイルの背景部分には、シナリオの他のステップの前に実行される1つ以上のシナリオステップを含めることができます。
- SpecFlowは、シナリオ用に生成されたすべての単体テストから呼び出されるバックグラウンド要素からメソッドを生成します。
シナリオの概要
シナリオの概要を使用して、データ駆動型の受け入れテストを定義できます。 シナリオの概要は、常にシナリオテンプレート仕様(<placeholder>構文を使用したデータプレースホルダーを含むシナリオ)と、プレースホルダーに値を提供する一連の例で構成されます。
- 単体テストフレームワークがサポートしている場合、SpecFlowはシナリオアウトラインから行ベースのテストを生成します。
- それ以外の場合は、シナリオアウトラインのパラメーター化された単体テストロジックメソッドと、各サンプルセットの個別の単体テストメソッドを生成します。
- トレーサビリティを向上させるため、生成された単体テストメソッド名は、シナリオの概要タイトルと例の最初の値(例の表の最初の列)から取得されます。
- したがって、サンプルセットの最初の列として一意で説明的なパラメーターを選択することをお勧めします。
- Gherkin構文では、すべての例の列にシナリオアウトライン内の一致するプレースホルダーが必要なので、テストの名前をより読みやすくするために使用される例のセットに任意の列を導入することもできます。
- SpecFlowは、ステップバインディングを照合する前に、プレースホルダー置換を個別のフェーズとして実行します。
- したがって、ステップバインディングの実装とパラメーターは、直接シナリオまたはシナリオアウトラインのどちらで実行されるかには依存しません。
- これにより、ステップバインディングを変更せずに、受け入れテストでさらに例を指定できます。
コメント
行を#で開始することにより、任意の場所で機能ファイルにコメント行を追加できます。 ただし、仕様内のコメントは、受け入れ基準が誤って指定されている兆候である可能性があるため、注意してください。 SpecFlowはコメント行を無視します。