web-dev-qa-db-ja.com

単体テスト、NUnitまたはVisual Studio?

ユニットテストを実行するために、Visual Studio(場合によっては再シャーパー)を使用しています。

NUnitについて聞いたことがありますが、それについて多くのことを知りません...

私はそれを気にする必要がありますか?ビジュアルスタジオよりも優れたものを提供できますか?

NUnitを使用する必要があるのはなぜですか?

114
Tim

NUnitにはMS-Testに比べていくつかの利点があります

  1. スイート属性-テストを集約して個別に実行できます(たとえば、高速テストと低速テストのある大規模プロジェクトに役立ちます)
  2. 読み取り可能なAssertメソッド、例: Assert.AreEqual(expected, actual) vs Assert.That(actual, Is.EqualTo(expected))
  3. NUnitには頻繁にバージョンが更新されます-MS-TestにはVSバージョンごとに1つしかありません。
  4. ResharperやTestDriven.NETを含む多くの統合ランナー
  5. 予期される例外メッセージアサーション-NUnitの属性を使用して実行できますが、MS-TestのTry-Catchを使用して実行する必要があります
  6. [TestCase]! NUnitでは、パラメーター化されたテストが可能です。
97
Elisha

私の現在の観点から(平均で約10人の開発者による8か月の開発の後)、次の理由でMSTestを使用することをお勧めしますagainst

  • フレームワーク自体は非常に遅いです。私が書いたテストコードを意味するものではありません-それはあなたの管理下にあります。テストスイート、シングルテストなどを実行しているかどうかに関係なく、これらのテストを実行するフレームワークは低速です。
  • Test-Metadataファイルを保持する必要があるため、複数の開発者が作業している場合(メタデータなどの再作成など)に常に複雑になります。他のすべてのテストスイートには、メタデータファイルは必要ありません。テストを整理するのはいいことですが、名前空間、クラス、メソッド名を使用して同じことを実現できます。
  • 継続的インテグレーションを行う場合、ビルドマシンでユニットテストを実行するには、そのマシンにVisual Studioをインストールする必要があります。

つまり、8か月前に再度決定する必要がある場合、おそらくNUnitを使用します。私は統合されたテスト結果レポートを持っていないかもしれませんが、開発者はよりシームレスなテスト経験を持つでしょう。

71
flq

これが私のMS Testの経験です

  • 約3800テストでMSテストを実行しています。
  • テストが実行を開始するのに非常に長い時間がかかります。これは、単一のテストを実行する場合は苦痛です。
  • テストの実行には約1GBのメモリが必要です。いいえ、テストのメモリリークが原因ではありません。しばしばOutOfMemoryExceptionsに遭遇します。
  • 大量のリソースを使用するため、バッチファイルからテストを実行し始めています。それでは、統合全体のメリットは何でしょうか?
  • バギーで不安定です:
    • たとえば、テストから[無視]属性を削除すると、テストに関する情報がどこかにキャッシュされるため、認識されません。問題を解決することがあるテストリストを更新するか、VSを再起動する必要があります。
    • 参照アセンブリをoutディレクトリにランダムにコピーしません。
    • 展開アイテム(使用する追加フ​​ァイル)が正しく機能しません。それらはランダムに無視されます。
  • Vsmdiおよびtestrunco​​nfigファイルには、隠された(テストコードには表示されない)情報があります。気にしないとうまくいかないかもしれません。
  • 機能的にはNUnitに匹敵するかもしれませんが、VSテスターエディションの使用を検討する場合は非常に高価です。

追加:もういくつかのテストがありますが、その数を言うことすらできません。 OutOfMemoryExceptionsおよびその他の不安定性の問題により、Visual Studioからこれらをすべて実行することは不可能です。スクリプトからテストを実行します。 Visual Studioでテスト結果を表示するのは簡単ですが、ソリューションが開いていると、VSがクラッシュします(毎回)。そのため、テキスト検索を使用して、失敗したテストを検索する必要があります。統合ツールの利点はもうありません。


別の更新:VS 2013を使用しています。多くのことが変わりました。彼らは私たちが始めてから3回目のMS Testテストランナーを書き直しました。これにより多くの重大な変更が発生しましたが、どちらの新しいバージョンも改善されていません。これらはすべてサポートされなくなったため、MS Testの派手な機能を使用しなかったことを嬉しく思います。それは本当に残念です。便利であるため、スクリプトを使用してすべての単体テストをビルドおよび実行しています。 Visual Studioでは、テストの実行を開始するのに数分かかりました(コンパイル後、最初のテストが開始されるまでの時間測定)。彼らはおそらくアップデートでそれを修正し、これは私たちのプロジェクトの特定の問題かもしれません。ただし、同じテストを実行する場合、Resharperははるかに高速です。

結論:少なくともResharperとの組み合わせで、MSテストは有用です。そして、彼らが最終的にテストランナーの作成方法を見つけ、次回Visual Studioを更新するときにこの種の重大な変更を行わないことを願っています。

49

NUnitは、Visual Studioと組み合わせて組み合わせて使用​​できます。それは独立したプログラムではなくフレームワークです。だからあなたはそれがあなたに合っているかどうかを見ることができます:)。

alt text http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=nunitit&DownloadId=61802

「プラグインをインストールすると、ツールメニューの下に新しいサブメニューが表示されます。」

インポートの詳細については、 http://nunitit.codeplex.com/ を参照してください。

また、SOの検索を使用して多くを見つけることができます。 このトピック たとえば、MS標準テストに対するNUnitの利点をリストします。

18
bastijn

NUnitに対するMS-Testの最大の利点は、MS-TestがReflectionを使用してモックオブジェクトを生成できることです。とても便利だと思いました

5
Maciej

NUnitは、VSのStandardエディションで動作します。

3

NUnitはユニットテストフレームワークであり、resharperでもサポートされています。マイクロソフトの単体テストフレームワークを使用していると思うので、NUnitはマイクロソフトの製品の代替にすぎません;)

NUnitのホームページへのリンクは次のとおりです。 http://nunit.org

1
Oliver Hanappi

私は他の人にはわかりませんが、NUnitはユニットテストを実行するための素敵なGUIとコンソールを提供し、NUnitテストの実行結果のレポートを生成することもできます。あなたのユニットテストのために取ります

1
Vinay Pandey

NUnit では、テストは並行して実行されません。むしろ、すべてのテストが単一のスレッドで実行されるようです。 MSTestでは、各テストは個別のスレッドでインスタンス化され、これにより実行がインターリーブされます。したがって、テストAの成功がテストBに依存している場合、テストAの実行中にテストBの実行が開始される可能性があるため、テストBが失敗する可能性があります。

0
Mourad Samy