2009-10-08 22 views
9

質問:Visual Studio 2008を使用してC#でWindows Formsアプリケーションを開始する場合、どのユニットテストフレームワークを使用する必要がありますか?Visual Studio 2008のC#でどのユニットテストフレームワークを使うべきですか? (Windowsフォームアプリケーション)

VS2008に1つのビルドがあるようですか?または、私はNUnitのようなものを調べるべきですか?または、ボンネットの下でVS2008で使用されているNUnitですか?最も人気のあるものは何ですか?

をすることができます何かを持って良いでしょう:(a)のモック/スタブ 、および例外に

おかげ

答えて

5

単純なアプリケーションの場合、VS2008に組み込まれているMSTestフレームワークは、すべてのボックスにチェックマークを付ける必要があります。 NUnitと同じではありませんが、多くの人が(誤って)それが同じものであるかのように参照します。

私は嘲笑のためにそれを使ったことがないので、他の人がそれについて詳しく説明することができます。それは、テスト目的のためだけに、ソリューション内に別のプロジェクトを生成します。 This is a good explanation of how to use it.

alt text

編集: はもう少し掘りをして、私はMSTestをし、NUnitののthis comparisonに出くわしました。 NUnitのフレームワークの

欠点:NUnitのの

  • インストールは別々のMSIに入っています。
  • Visual Studioとの統合がありません。
  • 手動でテストケースを作成する必要があります。
  • コードの自動生成がありません。
  • テストケースを実行するには、個別のウィンドウ(NUnitコンソールまたはGUI)を開く必要があります。
  • テストケースの実行の順序は使用できません。
  • テストケースをデバッグするための組み込み機能がありません。
  • テストケースを有効/無効にするための組み込み機能がありません。コンピュータ名、クラス名とホスト・タイプに基づいてテストケースをソートする
  • スタックトレースのようなテストケースの追加情報を提供することはありません作り付けの機能は、トレース情報など
  • ん作り付けの機能など

だこと私がリンクしている比較記事から。

私は、C#とJava用のJUnitのための唯一のMSTestををNUnitのを使用したことがないので、私は一種のバイアスされ、その点でです。 MSTestを、常に、個別にテストを実行します(個別のトレースログと)実際に詳細なレポートを表示し、すべての定型テストコードを自動生成し、作るもののすべてのそれらの種類を行うことができることなどの機能で、私のためだけでなく、本当にのWinFormsためを働いていますVS2008は素晴らしいIDEです。そのサウンドによって、NUnitは他の人にはうまくいきました。なぜなら、彼らはそれが好きな理由があります。

特定の機能が必要なようなNUnit/Testdriven.NETのアプローチを取る特別な理由がないか、テストを設定してVSに戻す方法を好むだけであれば、ボックスからすぐに動作するMSTestを使用しない理由はありません。

+1

多くの人がTestDriven.NETを使用してNUnitを起動すると不公平に思えます。それは素晴らしい統合を提供し、あなたが言及する欠点の大部分を取り除きます。 NUnit [Ignore]属性は、[Test]メソッドまたは[TestFixture]クラスを無効にします。また、IMHOのテストケースを注文するのはちょっと臭いです:) – si618

+4

ouch。 600文字で十分ではありません。 1.それは良いです。 VSTSをインストールすることなく、任意の(ビルド/ QA)マシンでテストを実行できます。 2.テストを右クリックして実行するには、Resharper/TestDriven.Netアドインを入手します。 SO q#196740も参照してください。 #3,4,6,10 - 意味がありません。私はプログラマーがVSよりもコードをよく理解していると思う。その結果、どのテストを書くかをより明確にすることができます。しかし、私はテスト感染しています(TDDの熱狂者を読んでください)。テストケースはオーダー依存であってはいけません。なぜそれが不利なのかは不明です。 – Gishu

+2

Contd ...テストケースをデバッグすることができます(テストDLL用にデバッグする外部exeとしてnunitを追加します)。それはあなたがあなたのコードをもう知らないことを意味します。テストケースをソートする - なぜあなたがそれを必要とするのか再び分かりません。しかし、あなたは[カテゴリ( "スローテスト")]のようなカテゴリにあなたのテストをグループ化してから、それらをテスト実行に含めるか除外することができます。また、実行したいテストを手動でチェックすることができるチェックボックスビューもあります。最後に9. stacktrace - nunitは最初のタブでそれを行います。ユニットテストフレームワークは、テストが失敗した正確な場所を指していないと、やや不具合になります。 – Gishu

2

を主張する (b)の能力私はで始まる、簡単のために、と言うでしょう1つはビジュアルスタジオ2008に組み込まれています。NUnitは素晴らしく、私はそれをたくさん使っていますので、ユニットテストを書いて快適になったら、おそらくNUnitに進むことができます。

+0

VS2008ユニットテストでは、例外が発生すると主張できますか?これを見ることはできませんか? – Greg

+2

はい、あなたは属性([ExpectedAssertion()]を使用していますが) – Steve

8

テストフレームワークにNUnitを使用することをお勧めします。ビルドサーバーにセットアップする必要がある場合は、非常に軽量で簡単に出荷できます。これはMSTestを使用した場合ではありません。モッキング/分離フレームワークに関して、Rhino Mockは最大のユーザーベースを持ち、Rhino Mockを使用して質問に対する回答を最も早く見つけることができます。

+1

MSTestの最大の欠点は、その道を始めると思いを変えるのが難しいことです。 NUnitはMSTestに簡単に変換できます。それらを試してみてください。 –

+2

NUnitもMonoで動作します – joemoe

5

我々はMSTestをし始めました。それはNUnitで複製するのが難しいという利点があります。クラスのプライベートメンバーにアクセスすることができます。これは、状態をチェックしているときに非常に重要です。たとえば、公開されていない辞書にエントリを入れる関数があるとします。私の理解は、NUnitでは、辞書を取得するためにリフレクションを使用するか、テストの唯一の目的のためにゲッターを追加する必要があるということです。ここでは、辞書をチェックするだけです。非常に簡単で非常にきれいです。また、私が愛している私的な機能をテストすることもできます(私は一部の人がこれを信じていないことを知っています)。私はMSTestが好きではありませんが、この機能はテストをはるかに簡単にします。

VS統合もいいです。

+0

MSTestはどのように「アクセスプライベートメンバー」を達成していますか?ちょうどなぜMSTestの人がこれを提供するのは簡単だろうがNUnitの人ではないことに興味がある – Greg

+1

私の理解はnunitの人はそれを信じていない。 MSTestを使用して、テストするクラスを右クリックし、 "Add Class Accessor"を選択します。テストでFoo_AccessorとしてFooクラスにアクセスします。 – Steve

+0

私のグループは単体テストには比較的新しいので、私たちがNUnitについて好きだったことがたくさんありましたが、プライベートアクセサリーは取引遮断器でした。 – Steve

3

MSTestを使用してください。これはVS2008に組み込まれており、IDEでテスト機能の作成をサポートしています。 MSTestを "伸ばした"場合は、NUnitまたはより現代的なxUnitを見てください。 MSTestでExpectedException属性を使用して修飾すると、例外が発生することがあります。

[Test] 
[ExpectedException(typeof(ArgumentNullException))] 
public void Should_throw_ArgumentNullException_when_the_Order_is_null() 
{ 
    OrderProcessor processor = new OrderProcessor(); 
    processor.ProcessOrder(null); 
} 

モッキングフレームワークは、テストフレームワークの選択に依存しません。模擬フレームワークの一般的な選択肢は、MoqRhino Mocksです。あなたは、テスト駆動のコードであることを行った場合には言及しなかった

+1

これはnUnitでも行うことができます。 –

+1

確かに。また、resharperを持っている場合は、Visual Studio内からNUnitを実行することもできます。 –

+0

MSTestは[Test]属性を使用しません。これはNUnitとMbUnitで使用されているため、これらの2つを交換可能にし、MSTestを使用しないためのボーナスとして、フレームワークに強く結びついています。 –

1

.. NUnitのと

  • ゴーあなたがのxUnitフレームワークのいずれかのに慣れていない場合。最小の学習曲線。それはずっと長い間続いてきました。 Charlie PooleはNUnit(オープンソース)で活動しており、良い更新履歴があります。
  • VS2008にはMSTestが内蔵されています。これはNUnitと同じではありません。私はNUnitから切り替える理由がありませんでした。私は、NUnitは確かに最大のユーザーベースを持っていると主張したいと思います。
  • NUnitのはモックのためにバンドルされた何かを持っているが、私は間違いなくMoqにあなたを指すと思います。両方でサポートされている例外をアサートRhino Mocksは今しばらくの間、トップの犬となっているが、それは常にエッジのシナリオを処理できませんが、部品番号は(オンラインドキュメントから)簡単に学習曲線を持っている...まだ私見

私は細い本'Pragmatic Unit Testing in C# with NUnit'を取得し、少なくとも一度それを実行することをお勧めします。 NUnitのV MSTestをラインで

、私はコメントすること収まりませんよ。 MSTestで0飛行時間。

  • 私はVS2010が自動コードカバレッジレポートのような装飾品を提供すると聞いていますがMSTestテストをお持ちの場合しかし、これは、私がMSTestsの支持を得ている議論の一種であり、IDEのサポートと統合についてもっと詳しく述べています。 ResharperやTestDrivenのようなアドインでは、それを価格でパッチすることができます。
  • また、IMHO、マイクロソフトのユニットテストツールでは、暗い道を導く微妙な方法があります。ので注意してください。このスレッドでDaleへの私のコメントを参照してください。
関連する問題