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