SpecFlowは、開発者とビジネスマンが協力して、システムのビジネス機能を実行可能仕様の形式で定義できるようにするためのフレームワークです。実行可能仕様は、繰り返し実行でき、システムの動作を定義する「生きたドキュメント」システムとして機能します。任意の時点で。これを効果的に行うには、仕様を外部から書き込む必要があります。つまり、アプリケーションへのエントリポイントをヒットします。これは、Webベースのアプリケーションの場合はWebサイトのURLまたはある種のサービスエンドポイントのいずれかであり、そのためのビジネス要件を検証します。点。あなたの質問に答えるには:
受け入れテストは、ライブ製品のエンドツーエンドテストですか?私はこれについていくつかのはいといくつかのいいえを読みました。エンドツーエンドでテストする必要がありますか、それともc#、javascriptを単体テストし、webapiルートでいくつかの統合テストを投入する必要がありますか?
検収試験はその大部分を占めていますが、単独で行うべきではありません。データストアを使用している場合、または外部システムが期待どおりに通信していることを確認する場合は、実際にデータストアにアクセスする統合テストも必要になる場合があります。確かに、個々のコンポーネントを単体テストし、必要に応じて依存関係をモック/スタブアウトする必要がありますが、これでは、システムのさまざまなレイヤーが全体として相互依存的に機能しているかどうかはわかりません。これがSpecFlowが本当に輝いているところです。ライブサイトで受け入れテストを実行することを必ずしも推奨するわけではありませんが、受け入れテストを検証するためにライブのミラーを設定することは、理想的にはCIビルドプロセスの一部として、非常に価値のある取り組みです。
ブラウザを操作するSpecflowを使用してテストを作成することは可能ですか?エンドツーエンドでRanorexやSeleniumのようなものを使用する必要がありますか?
絶対に可能です。Selenium WebDriverまたはWatin(Seleniumの.NETラッパー)のようなものを使用できます。Watinは、私が最後に見たときにIEでしか機能しませんでした。Firefox 3.6で動作していましたが、5をリリースしたときのFFコアの変更により動作が停止しました。それは本当に素晴らしいフレームワークだったので残念です。SpecFlowは、各テスト実行中にブラウザーをスピンアップおよびティアダウンするために使用できるフックを提供します。SeleniumWebDriverを使用した簡単な例を次に示します。
[Binding]
public class FeatureHooks
{
[BeforeFeature]
public static void StartWebDriver()
{
Runner.InitialiseHost(HostTypeOption.Firefox);
}
[AfterFeature]
public static void StopWebDriver()
{
Runner.StopHost();
}
}
Runnerは、受け入れテストの自動化を支援するために開発しているページフレームワークの一部として使用する静的クラスです。ホストの初期化の部分は次のとおりです。
public static class Runner
{
internal static IWebDriver Host { get; private set; }
public static void InitialiseHost(HostTypeOption hostType, int windowWidth = 1024, int windowHeight = 768)
{
switch (hostType)
{
case HostTypeOption.Firefox:
Host = new FirefoxDriver();
break;
case HostTypeOption.InternetExplorer:
Host = new InternetExplorerDriver();
break;
case HostTypeOption.Chrome:
Host = new ChromeDriver();
break;
case HostTypeOption.Safari:
Host = new SafariDriver();
break;
default:
throw new ArgumentOutOfRangeException("hostType");
}
Host.Manage().Window.Size = new System.Drawing.Size(windowWidth, windowHeight);
Host.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(3));
}
public static void StopHost()
{
Host.Quit();
Host = null;
}
}
IEまたはChromeを使用する場合は、特定のドライバーをダウンロードして、Acceptance Testプロジェクトのbinディレクトリに追加する必要がありますが、Firefoxはそのまま動作します。