2011-02-06 8 views
11

私はASP.NET MVCでBehavior Driven Developmentを学習しており、Steve Sandersonのa postに基づいて、BDDは少なくとも以下のテストタイプを意味することができることを理解しています:個々のコード単位& UIのやりとり。同様のものはthis postに記載されています。ユニットテストと統合テストの両方をテストするには、2つの異なるテストフレームワークが必要ですか? MSpecようASP.NET MVCのBDDスタイルでユニット&統合テストを行うにはどうすればよいですか?

  • ユニットテストリポジトリ、コントローラ、コンテキスト/仕様フレームワークを使用して&サービス。これでテストした結果は、開発チームにとって有益です。

  • SpecFlow with Watinのような、与えられた/ when/thenフレームワークを使った完全な振る舞い(統合)のテスト。このテストの結果は私のクライアントに役立つでしょう。私はBDDを使用して、これまで見てきた

動画のみリポジトリ、コントローラ、などの動作をテストすることなく、エンティティの動作をテストするに限られていた...私は両方見ることができるサンプルプロジェクトがありますBDDアプローチを使用したユニットとインテグレーションの自動テスト?

答えて

9

個人的には、私はときどき(ただし必ずしもそうではない)Watinを使用する機能固有のテスト(つまり、「ユーザーが新しい会社のレコードを作成する」)を構築するためにSpecFlowを使用します。私のレポジトリやサービスクラスをテストするために、NUnitでunit/integrationテストを使用します。統合テストは、テスト中にデータベースと対話する必要があるときのためのもので、ユニットは外部のやり取りなしでテスト対象のオブジェクトにコードを実行するためのものです。

私はあなたの非UIテストにBDDフレームワークを使用する必要はないと言います。あなたが望むことができますが、これに固くて速いルールはありません。これを行うつもりなら、あなたのテストのために複数のプロジェクトを作成することを強くお勧めします。それらを分割しておくことは、すべてのテストを1つのプロジェクトにミキシングするのではなく、良いアイデアです。あなたはそれらに名前を付けることができます:

MyProject.Tests.Features < - BDD SpecFlowテスト用に。

MyProject.Tests.Integration < - の場合、 という外部リソース、つまりデータベースにアクセスするテスト。

MyProject.Tests.Unit

使用すると、2つのBDDフレームワークを使用することを希望していない場合でも、BDDの方法でMSTestを/ NUnitのを使用することができます。たとえば、thisブログ記事では、BDDに近いが、MSTest/NUnit単体テストを目的とした素敵な命名規則について説明しています。あなたは、リポジトリのようなテストのときに、SpecFlow以外のテストでこれを使うことができます。

要約すると、SpecFlowとMSpecをテストに使用する必要はありませんが、そうする場合は、別々のテストプロジェクトをお勧めします。

+0

私は同意します。これはシナリオとして指定されているため、SpecFlowなどが必要な外部/ UIテストです。なぜ単体テストをいつもと違うやり方で行うべきなのか分かりません。 – Jonathan

2

私は一般に、Jasonが投稿した内容に同意します。

仕様をシステム/統合とユニットレベルの2つのカテゴリに分類したい場合があります。両方のカテゴリをフレームワークで記述できますが、コードのみのアプローチ(NUnit、MSpecなど)では、ビジネスアナリストはC#を書くことができる必要があることに注意してください。 SpecFlow/Gherkinは、アナリストやユーザーが仕様書を書くのに適しています。構文とルール(Given、When、Then)は理解しやすく、ユーザーの視点から仕様書を書くことは、ほとんどトレーニングの後に簡単に書き留めることができるためです。コミュニケーションの隙間を埋めること、そしてあなたのチームがあなたのドメインのユビキタス言語を形成するのを手助けすることが、すべてです。

「外側」と「内側」の両方で動作する仕様をサポートすることをおすすめします。ユーザー/アナリスト/製品の所有者が作成したSpecFlow仕様の「outside in」で始まり、「実装されていない」から「緑色」に向かって実際のコードを記述することができます。この機能をサポートするコードは、MSpecのようなより技術的に指向のフレームワーク(TDDを使用して開発されました。

ユニットテストとインテグレーションテストの両方にMSpecを使用するリポジトリは、https://github.com/agross/duplicatefinderです。

関連する問題