7

SpecFlowの例を見ていますが、MVCサンプルにはテスト用のいくつかの選択肢が含まれています。

  • コントローラによって生成された検証結果に基づく受け入れテスト。
  • MvcIntegrationTestFrameworkを使用した統合テスト。
  • Seleniumを使用した自動受け入れテスト。
  • テスターが結果を手動で検証するように求められた場合の手動受け入れテスト。

私はSpecFlowの例がどれほどうまく書かれているかに非常に感銘を受けていると言わなければなりません(そしてダウンロード後数分以内にそれらを実行することができ、データベースを構成してSelenium Remote Controlサーバーをインストールする必要がありました)。テストの代替案を見ると、それらのほとんどが代替案ではなく、互いに補完し合っていることがわかります。これらのテストの次の組み合わせを考えることができます。

  • コントローラは、SpecFlowを使用するのではなく、TDDスタイルでテストされます(Given / When / Thenタイプのテストは、より高いエンドツーエンドレベルで適用する必要があります。それぞれのコンポーネントに適切なコードカバレッジを提供する必要があります。
  • MvcIntegrationTestFrameworkは、開発セッション中に統合テストを実行するときに役立ちます。これらのテストもデイリービルドの一部です。
  • Seleniumベースのテストは自動化されていますが、速度が遅く、主にQAセッション中に開始され、ページやサイトのワークフローに壊れたロジックがないことをすばやく検証します。
  • テスターが結果の妥当性を確認するように求められたときの手動受け入れテストは、主にページのルックアンドフィールを確認することです。

Web開発でSpecFlow、Cucumber、またはその他のBDD受け入れテストフレームワークを使用している場合、さまざまなテストタイプからの選択に関する実践を共有してください。

前もって感謝します。

4

2 に答える 2

6

それはすべて行動です。

特定のコンテキストが与えられると、(特定のスコープ内で)イベントが発生すると、何らかの結果が発生するはずです。

スコープは、アプリケーション全体、システムの一部、または単一のクラスにすることができます。関数でさえ、入力をコンテキストとして、出力を結果として、このように動作します(関数型言語にもBDDを使用できます!)

聴衆は技術的であるため、私はクラスまたは統合レベルでユニットフレームワーク(NUnit、JUnit、RSpecなど)を使用する傾向があります。時々私はGiven/When/Thenをコメントで文書化します。

シナリオレベルでは、シナリオの読み取りまたは書き込みを実際に支援したいのは誰かを見つけようとします。ビジネスの利害関係者でさえ、いくつかのドットと角かっこを含むテキストを読むことができるので、MSpecやJBehaveのような自然言語フレームワークを使用する主な理由は、シナリオを自分で作成するか、ドットに本当に気が進まない人に見せたいかどうかです。とブラケット。

その後、フレームワークがビルドシステムとどのように連携するか、および関心のある利害関係者に適切な読み取りまたは書き込み機能を提供する方法について説明します。

これは、単純なDSLを使用したシナリオで実行できることを示すために私が書いた例です。これはNUnitで書かれています。

これは、同じコードベースの例で、クラスレベルの例のコメントにGiven、When、Thenを示しています。

背後にある手順を抽象化し、その背後に画面またはページを配置します。次に、使用している自動化フレームワーク(Selenium、Watir、WebRat、Microsoft UI Automationなど)を呼び出す画面とページに配置します。

私が提供した例はそれ自体が自動化ツールであるため、混乱を招く場合に備えて、シナリオは偽のGUIの動作を示すことで自動化ツールの動作を示しています。それがとにかく役立つことを願っています!

于 2010-10-31T23:10:27.333 に答える
2

受け入れテストは一種の機能テストであるため、一般的な目標は、アプリケーションをエンドツーエンドでテストすることです。一方、テスト自動化の効率(テスト自動化を実装するためにどれだけの労力が必要か)、保守性、パフォーマンス、および信頼性を考慮する必要がある場合があります。また、テスト自動化が開発プロセスに簡単に適合できることも重要です。これにより、一種の「テストファースト」アプローチをサポートします(外部から内部への開発をサポートします)。

したがって、これはトレードオフであり、状況ごとに異なる可能性があります(そのため、代替手段を提供しました)。

今日最も広く当てはまるオプションは、コントローラー層でテストすることだと確信しています。(おそらく、UIおよびUI自動化フレームワークが進化するにつれて、これは変更されます。)

于 2010-10-25T08:04:15.297 に答える