Articles

Specflowチュートリアル:Bddツールへの究極のガイド

Specflowと動作駆動開発(BDD)チュートリアルへの完全なガイド:

Specflowとは何ですか?

Specflowは、.NET frameworkのBDDプラクティスをサポートするテストフレームワークです。 これはGitHubでホストされているオープンソースのフレームワークです。 これは、.NETアプリケーションのATDD(Acceptance test driver development)の使用に役立ちます。 これにより、誰もが明確に理解できるガーキン言語によって定義された平易な英語でシナリオを定義することができます。

Bddアプローチには、Cucumber/JBehave for Java、Letタスfor Python、Jasmine for Javascript、Specflow for.NETのようなテストを書くためのさまざまなツールがあります。

SpecflowとBDD

BDD(Behavior Driven Development)は、製品、開発者、テス

bddアプローチの最終目標は、誤解を避けるためにチーム全体が理解できるビジネス要件を作成し、開発中の機能を最も受け入れられる方法で出荷す

完全なSpecflowチュートリアルシリーズ:

概念をよりよく理解するために、完全なSpecflowトレーニングシリーズを読んでください。チュートリアル#1:Specflow BDDツールの紹介(このチュートリアル)
チュートリアル#2:SpecflowとSeleniumの例
チュートリアル#3:Specflowバインディング&高度な概念
チュートリアル#4: ステップ引数変換&Specflowテーブル
Tutorial#5:Specflow Living Documentation with Pickles
Tutorial#6:Specflow Report Generator
Tutorial#7:Specflow Interview questions

Specflowシリーズのチュートリアルの簡単な概要:Th>

チュートリアル# 説明 1 specflow bddツールの紹介(このチュートリアル)
この入門チュートリアルでは、specflowに関するすべてを詳細に説明します。 Specflowは、.NET frameworkのBDDプラクティスをサポートするテストフレームワークです。 これはGitHubでホストされているオープンソースのフレームワークです。 これは、.NETアプリケーションのATDD(Acceptance test driver development)の使用に役立ちます。 2 SpecflowとSeleniumの例
このチュートリアルでは、Youtubeアプリケーションでのビデオ検索の簡単なテストシナリオを通じて、SeleniumとSpecflowフレームワークの統合に焦点 また、プライベートクラスフィールドを使用して異なるバインディング間でデータを共有する方法も確認します。 3 SpecflowとSeleniumの例
このチュートリアルでは、Youtubeアプリケーションでのビデオ検索の簡単なテストシナリオを通じて、SeleniumとSpecflowフレームワークの統合に焦点 また、プライベートクラスフィールドを使用して異なるバインディング間でデータを共有する方法も確認します。 4 ステップ引数変換&Specflowテーブル
この有益なSpecflowチュートリアルでは、定型コードを回避するためにSpecflow引数のカスタム型変換を可能にするステップ引数変換について詳細に説明し、Specflowテーブルは、ユーザーフレンドリーな表形式でシングルステップで多くのフィールド/データを渡す必要があるときに便利です。 5 Specflow Living Documentation with Pickles
このSpecflowチュートリアルからは、既存のSpecflowファイルを使用してpicklesと呼ばれるオープンソースのフレームワークを介して見栄えの良いliving Documentationを生成する方法を知ることができます。 6 Specflow Report Generator
このSpecflowレポートチュートリアルでは、Specflow実行可能ファイルを介してHTMLレポートを生成するとともに、Specflow機能テストを実行する方法を学 7 Specflowインタビューの質問
最も人気のあるSpecflowインタビューの質問と回答のリストは、このチュートリアルに含まれています。

このシリーズの最初のチュートリアルから始めましょう。

Specflow BDDツールの概要

ビデオチュートリアルを見る:

ここでは、Specflowと動作駆動開発に関するビデオチュートリアルです:

BDDの機能

BDDの主な機能を以下に説明します。

#1)例やシナリオを通じて開発されているシステムや機能の動作を定義しようとします。 たとえば、単純な電卓アプリケーションを構築している場合、さまざまな動作には加算、乗算、除算などが含まれます。

したがって、BDDを通じて、すべての利害関係者が最初に会い、追加のようなアプリケーションの動作を決定し、以下に示すようなシナリオを持ちます。

Given, I have 2 numbers 30 and 50 as inputWhen I add these 2 numbersThen I should get an output of 80

上記の表現が表示されている場合は、誰もが明確に理解でき、機能の要件を明確にする平易な英語のシナリオです(受け入れ基準 したがって、最初のステップは、これらの要件を明確にすることです。

#2)これらのシナリオのセットで、QAはこれらに対してテストを書き込み、機能がまだ開発されていないため、これは最初は失敗します。

#3)ここで、開発者は機能コードを記述し、これらのテストを再度実行します。

#4)テストは合格または失敗する可能性があります。 失敗した場合-コードをリファクタリングし、プロセスを繰り返す

#5)コードのリファクタリングが完了すると、すべてのシナリオ/テストが合格するはず

したがって、本質的に、BDDはTDDアプローチを使用し、シナリオの形でいくつかの共通の理解しやすい仕様を持つことによって、次のレベルにそれを取 また、機能ドキュメント自体も表しています。BDDアプローチには、Java用のCucumber/JBehave、Python用のLetタス、Javascript用のJasmine、.NET用のSpecflowなど、テストを記述するためのさまざまなツールがあります。

このチュートリアルでは、Specflowに焦点を当てます。

このチュートリアルでは、Specflowに焦点を当てます。

Also Read=>トップBDDツールとテストフレームワーク

キーワード–与えられた、とき&Then

ユニットテストの世界から、私たちのほとん 今、与えられた、いつ、そしてその後は、BDDの世界でこれらの代替品です。

これらのそれぞれを理解するための例を見てみましょう。 前提条件としてログインする必要があるeコマースアプリケーションのショッピングカートに追加される製品を検証するシナリオを一覧表示するとし

仕様は次のように書くことができます。

Scenario: Products get added to cart for a logged in customerGiven I have a logged-in customer on my applicationWhen I add 2 quantity of a product to my shopping cartThen the shopping cart should get updated and have the right product and quantity 

与えられた:これは、定義されているシナリオの前提条件のセットを記述するために使 たとえば、この例では、シナリオの前提条件はログインしている顧客です。 したがって、単体テストのArrangeの類推と比較すると、stepの実装では、ログインした顧客がいることを確認する必要があります。

When:これは、アクションまたは実行ステップを記述するために使用されます。 この例では、顧客が自分のショッピングカートに商品を追加しようとしていることを示しています。 したがって、このステップのステップ実装は、カートに製品を追加するためのシミュレーションコードを処理します。 これは、単体テストのActステップと比較できます。

Then:これは、シナリオの結果と本質的に検証を配置する場所を記述するために使用されます。 これは、単体テストの世界のAssertステップと比較することができます。 ここの例では、ステップ実装は、製品が実際に追加され、数量が顧客によって選択されたものと同じであるかどうかをアサートします。

機能ファイル

機能ファイルは、基本的に、開発中またはテスト中のアプリケーションの複数のシナリオのグループ化です。 また、アプリケーションを論理的に分離することができるアプリケーションの異なるモジュールと単純に考えることもできます。

例:

電子商取引アプリケーションは、

  • ログイン/ログアウト機能
  • ショッピングカート
  • 支払いなどのような異なる高レベルの機能ファ

Specflowとは何ですか?

Specflowは、.NET frameworkのBDDプラクティスをサポートするツールです。 これはGitHubでホストされているオープンソースのフレームワークです。 これは、.NETアプリケーションのATDD(Acceptance test driver development)の使用に役立ちます。

例のパラダイムによる仕様を使用してアプリケーションのビジネス要件をバインドすると、すべての利害関係者によるアプリケーションの動作

機能を作成するためのGherkin構文を使用します&シナリオ。 また、積極的な議論/開発者フォーラムを持っています。

Specflow–はじめに

このセクションでは、Visual Studio IDEへのspecflowのインストールと、単純な文字列ユーティリティアプリケーションの機能ファイルの作成につ

サンプルアプリケーションについて

このチュートリアルでは、Specflowフレームワークのさまざまな機能を説明します。

  1. 2つの数値を追加する。
  2. 2つの数字を減算します。
  3. 2つの数値を除算して乗算します。
  4. 与えられた数の平方根を求める。

Specflowインストールガイド

Specflowのインストールは2ステップのプロセスです

#1)必要なプラグインをVisual Studio IDEにインストールします。

  • specflowプラグインをインストールするには、Tools->&更新に移動します。左のパネルの「オンライン」をクリックしてください。
  • 今すぐクリックしてください。
  • 右のパネルでspecflowを検索します。
  • 検索結果から「Specflow For Visual Studio2017」を選択します。

Specflow-Plugin Installation

#2)機能ファイルとステップ定義を使用してプロジェクトを設定します。Visual Studioで単純な新しいプロジェクトを作成します。 クラスライブラリ/コンソールアプリケーション/単体テストプロジェクトなどのような任意の種類のプロジェクトを作成できます。 簡単にするために、クラスライブラリプロジェクトを取り上げています。 プロジェクトに”SpecflowBasic”という名前を付けます。

  • 作成しようとしているSpecflowシナリオを実行するには、テストランナーが必要です。 SpecflowはSpecflow+Runnerと呼ばれるランナーを提供します(これは有料版で、無料版では遅延が発生します)。
  • (このシリーズのさらなる記事で見るNUnitとMsTestには、他のランナーも利用できます)。Specflow+Runnerをインストールするには-Tools->NuGet Package Manager->パッケージマネージャコンソールに移動します。

    パッケージマネージャコンソールが開いたら、コマンドを実行します。

     Install-Package SpecRun.SpecFlow

    Specrun-Installation

    • また、値をアサートするためには、テストフレームワークの助けが必要です。 NUnitはオプションの1つにすることができ、他のオプションにはMsTestなどがあります。 NUnit frameworkをアプリケーションにインストールするには、パッケージマネージャーコンソールを開き、コマンドを入力します。
     Install-Package NUnit 

    #3)テスト対象のアプリケーションになる”CalculatorApplication”という名前の新しいクラスを作成します。 これは、加算/乗算/除算/平方根などを実行する関数を持つ単純なクラスです。、与えられた入力のために。 これは、CalculatorApplicationクラスがどのように見えるかです。

    #4)パッケージがインストールされたら、プロジェクト内に2つのフォルダを作成し、それぞれ機能ファイルとステップバインディングを格納するための機能とステップ定義として名前を付けます。 私たちは、機能&ステップ定義のために、このフォルダ構成の理由を詳細に説明します。5)featuresフォルダに新しいFeatureファイルを追加し、CalculatorFeatureという名前を付けます。/p>

    電卓機能

    デフォルトでは、機能ファイルに機能とシナリオの説明が含まれていることがわかります。これをテストする内容に置き換えます。

     Feature: CalculatorFeatureIn order to test my applicationAs a developerI want to validate different operations of the applicationScenario: Add two numbersGiven I have provided 70 and 20 as the inputsWhen I press addThen the result should be 90Scenario: Substract two numbersGiven I have provided 70 and 20 as the inputsWhen I press substractThen the result should be 50Scenario: Multiply two numbersGiven I have provided 70 and 20 as the inputsWhen I press multiplyThen the result should be 1400Scenario: Divide two numbersGiven I have provided 70 and 20 as the inputsWhen I press divideThen the result should be 3.5Scenario: SquareRoot of numberGiven I have provided 70 as inputWhen I press squarerootThen the result should be 8.37

    #6)ステップ定義の生成:Specflowは、フィーチャファイルシナリオのさまざまなステップのバインディング/実装を自動生成する方法を提供します。 これは、機能ファイルを右クリックし、”ステップ定義の生成”をクリックすることで実現できます。

    ステップ定義を生成

    このステップは、すべてのステップの実装を保証するものではありませんが、シナリオ内の一般的なステッ ただし、シナリオステップを実装する必要があるたびに定型コードを回避する作業が行われます。

    “Generate Step Definitions”をクリックすると、プロセッサが検出した識別されたステップ実装を一覧表示するウィンドウが表示されます。 一つは、要件に応じて選択または選択解除することができます。

    ステップ定義スケルトンを生成

    後のセクションでは、上のスクリーンショットに示すスタイルドロップダウンの詳細を調べます。

    今のところ、それらのすべてをデフォルト設定で選択したままにしておきましょう。 プレビューをクリックすると、実装がどのように見えるかのスナップショットが表示されます。

    実装のスナップショット

    ステップ定義を作成した後、まだいくつかの実装されていないステップがある場合、機能ファイルには、未実装 まだ実装されていない(またはあいまいなステップ定義がある)ステップがあることを知ることを絶対に簡単にすることで、これらのステップを別の色で示しています。

    サンプル画面では、以下のことが示されています。

    実装がありません

    注:ステップ定義は手動でも作成で属性を持つcsファイルはステップ実装クラスであり、Gherkin構文は指定されたシナリオステップの実装に一致するものを探します

    Execution

    上記のセク この遅延は、登録されたバリアントおよびNUnitやMsTestのようなSpecrun runnerの他のフレーバーには存在しません)。

    すべてのステップが実装されておらず、保留中の状態を持つバインディングがまだある場合。 その後、出力は保留中として表示されます。

    バインディングの実装がなく、シナリオがすべて保留されている場合、この時点でこれらのテスト/シナリオを実行してみましょう。

    保留中のシナリオ

    今度は、テストするメソッド、つまりadd、subtract、multiply、divide、sqrtを使用してCalculatorApplicationクラスを実装してみましょう。以下は、CalculatorApplicationクラスがどのように見えるかのコードサンプルです。

    :

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SpecflowBasic { class CalculatorApplication { public int add(int input1, int input2) { return input1 + input2; } public int subsctract(int input1, int input2) { return input1 - input2; } public int multiply(int input1, int input2) { return input1 * input2; } public double divide(double input1, double input2) { return input2 != 0 ? Math.Round(input1 / input2, 2) : 0; } public double squareRoot(int input1) { return input1 != 0 ? Math.Round(Math.Sqrt(input1), 2) : 0; } } } 

    アプリケーションの準備ができたら、シナリオステップごとにバインディングを実装する方法を考えてみましょう。

    のは、これらを実装するためのステップバイステップのアプローチを見てみましょう:

    • まず、我々はテストする必要があるアプリケーションのイ 簡単にするために、ステップバインディングでAUT(Application Under Test class)をインスタンス化し、インスタンス化されたインスタンスを使用して、実装されたステッ
    • 入力と出力をキャプチャするために、アプリケーションインスタンスの関数を呼び出すために、これらの値を保持する変数を宣言しています。

    Add機能の検証に関連するすべてのバインディングのエンドツーエンドの実装を見てみましょう(残りのシナリオは単にこれを拡張しています)。

    追加シナリオは以下のようになります。

    Scenario: Add two numbers Given I have provided 70 and 20 as the inputs When I press add Then the result should 

    これらの個々のステップのそれぞれのステップの実装を見てみましょう。 すべてのstep実装を使用するために、以下に示すように、テスト対象のアプリケーションのインスタンスと、入力変数と出力変数を保持する変数を宣言しています。

    // instantiating application instance CalculatorApplication app = new CalculatorApplication(); // variables to hold input values and the intermeditate result int input1, input2; double output; 

    シナリオステップの実装を一つずつ見てみましょう。ステップ1:入力として70と20を提供しました。p>

     public void GivenIHaveProvidedAndAsTheInputs(int p0, int p1) { input1 = p0; input2 = p1; } 

    ここでは、シナリオステップから渡された値で入力変数を初期化しました。 p0およびp1は、シナリオステップから渡される値であり、それぞれ70&20として初期化されます。

    ステップ2:追加を押したとき。これは、テスト対象のアプリケーションで実際のメソッドが呼び出される実行(またはAct)ステップです。

     public void WhenIPressAdd() { output = app.add(input1, input2); } 

    これは、テスト対象のアプ 入力変数input1とinput2にはすでにStep1で渡された値が含まれているため、アプリケーションインスタンスはこれらの変数を使用してメソッドを呼び出ステップ3:–結果は90にする必要があります。

    ステップ3:-結果は90にする必要があります。

     public void ThenTheResultShouldBe(double p0) { Assert.AreEqual(p0, output); }

    これは、出力がメソッド呼び出しによって生成され、アプリケーションインスタンスが期待される出力に対して検証される検証(またはア使用されるAssertキーワードはNUnitフレームワークからのものであり、設定されている検証/期待に応じてtrueまたはfalseを返します。 Falseを返すと、ステップの実装が失敗し、シナリオの結果がfailとして表示されます。また、出力変数は、実際のメソッドがアプリケーションインスタンスで呼び出された前のステップから値を取得することに注意してください。

    上記と同様に、シナリオステップの残りのステップのステップ実装は同じ方法で実行され、違いはアプリケーションインスタンスで異なるメソッ

    すべてのシナリオステップが実装されると、テストを実行できます。

    結果の出力は以下のようになります:

    Consolidated Ouput

    個々のシナリオの出力を表示することもできます。

    シナリオ出力

    結論

    この記事では、BDDとは何か、ツールとは何かについての基本的な理解が得られたことを願っています。これは、specflowをカバーした.net用のbddをサポートしています。

    サンプルアプリケーションの助けを借りて、Specflow機能ファイルのインストールと実行についても説明しました。

    コードファイル

    アプリケーションで使用されるコードファイルを以下に示します:

    CalculatorFeatureSteps。cs

    using System;using TechTalk.SpecFlow;using NUnit;using NUnit.Framework;namespace SpecflowBasic.StepDefinitions{public class CalculatorFeatureSteps{// instantiating application instanceCalculatorApplication app = new CalculatorApplication();// variables to hold input values and the intermeditate resultint input1, input2;double output;public void GivenIHaveProvidedAndAsTheInputs(int p0, int p1){input1 = p0;input2 = p1;}public void GivenIHaveProvidedAsInput(int p0){input1 = p0;}public void WhenIPressAdd(){output = app.add(input1, input2);}public void WhenIPressSubstract(){output = app.subsctract(input1, input2);}public void WhenIPressMultiply(){output = app.multiply(input1, input2);}public void WhenIPressDivide(){output = app.divide(input1, input2);}public void WhenIPressSquareroot(){output = app.squareRoot(input1);}public void ThenTheResultShouldBe(double p0){Assert.AreEqual(p0, output);}}} 

    CalculatorApplication。cs

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace SpecflowBasic{class CalculatorApplication{public int add(int input1, int input2){return input1 + input2;}public int subsctract(int input1, int input2){return input1 - input2;}public int multiply(int input1, int input2){return input1 * input2;}public double divide(double input1, double input2){return input2 != 0 ? Math.Round(input1 / input2, 2) : 0;}public double squareRoot(int input1){return input1 != 0 ? Math.Round(Math.Sqrt(input1), 2) : 0;}}} 

    パッケージ。config

    <?xml version="1.0" encoding="utf-8"?><packages><package version="10.0.3" targetFramework="net461" /><package version="3.11.0" targetFramework="net461" /><package version="2.4.0" targetFramework="net461" /><package version="1.8.5" targetFramework="net461" /><package version="1.8.5" targetFramework="net461" /><package version="1.8.5" targetFramework="net461" /><package version="4.3.0" targetFramework="net461" /></packages>

    今後のチュートリアルでは、SpecflowとSelenium Webdriverを使用するエンドツーエンドの例について説明します!

    次のチュートリアル