私は職場で新しいプロジェクトを立ち上げ、単体テストを始めたいと思っています。 VS 2008、C#、およびASP.NET MVCを使用します。 NUnitまたはVS2008に組み込まれているテストプロジェクトの使用を検討していますが、他の提案を調査することもできます。 1つのシステムが他のシステムより優れているか、おそらく他のシステムよりも使用/理解しやすいでしょうか?このプロジェクトを、今後の開発努力の一種の「ベストプラクティス」として設定することを検討しています。
助けと提案をありがとう!
Daok VS2008テストプロジェクトのすべてのプロに名前を付けました。ここにNUnitのプロを示します。
単体テストフレームワークは、実際にはそれほど重要ではありません。テストクラスを個別のプロジェクトファイルと条件付きコンパイル(VS-> NUnitなど)で変換できるためです。
#if!NUNIT Microsoft.VisualStudio.TestTools.UnitTestingを使用; #else NUnit.Frameworkを使用; using TestClass = NUnit。 Framework.TestFixtureAttribute; TestMethod = NUnit.Framework.TestAttribute; using TestInitialize = NUnit.Framework.SetUpAttribute; using TestCleanup = NUnit.Framework.TearDownAttribute; を使用してTestContext = System.String; using DeploymentItem = NUnit.Framework.DescriptionAttribute; #endif
TestDriven.Netプラグインは素晴らしく、それほど高価ではありません...プレーンなVS2008のみで、テストクラスまたはテストリストからテストを見つける必要があります。 TestDriven.Netを使用すると、テストするクラスから直接テストを実行できます。結局のところ、単体テストは保守が容易で、開発者の近くにあるべきです。
VS2008組み込みユニットテストフレームワークの利点/変更
NUnitを2年間使用しています。すべては問題ありませんが、VSのUnitシステムはGui内にあり、混乱することなくプライベート機能のテストをより簡単に実行できるため、かなりいいと言わざるを得ません。また、VSの単体テストでは、NUnitだけではできないカバーやその他のことを行うことができます。
少しトピックから外れていますが、NUnitを使用する場合は、 ReSharper を使用することをお勧めします。VSUIにいくつかのボタンを追加し、IDE内からのテストの実行とデバッグをはるかに簡単にします。
このレビューは少し古いですが、これについてさらに詳しく説明しています。
Visual Studioのテストフレームワークのやや面倒な点の1つは、プロジェクトディレクトリが乱雑になる傾向がある多くのテスト実行ファイルが作成されることです-これはそれほど大したことではありません。
また、TestDriven.NETなどのプラグインがない場合、組み込みのMicrosoft VSテストフレームワークと同様に、Visual Studio環境内でNUnit(またはMbUnit、xUnitなど)ユニットテストをデバッグすることはできません。
NUnitを介したVSユニットテストの私の主な機能は、VSテストの作成が、プライベートメンバーアクセス用に生成されたコードの束を挿入する傾向があることです。
プライベートメソッドをテストしたい人もいれば、そうでない人もいますが、これは別のトピックです。
私が懸念しているのは、ユニットテストを作成するとき、それらを非常に制御する必要があるため、テストする内容とテスト方法を正確に把握していることです。自動生成されたコードがある場合、その所有権の一部を失います。
私は両方を使用してTDDをいくつか実行しました(多分私は少し馬鹿だ)nUnitは私にとってはるかに高速で簡単に使用できるようです。そして、私がたくさん言うとき、私は多くのことを意味します。
MS Testでは、あらゆる場所に属性が多すぎます-実際のテストを行うコードは、あちこちで読むことができる小さな行です。大きな混乱。 nUnitでは、テストを実行するコードが属性を支配します。
また、nUnitでは、実行するテスト(1つだけ、クラスをカバーするすべてのテスト、アセンブリ、ソリューション)をクリックするだけです。ワンクリック。そして、窓は明確で大きくなっています。明確な緑と赤のライトが点灯します。あなたは本当に一目で何が起こるか知っています。
VSTSでは、テストリストは画面の下部に詰まっていて、小さくて見苦しいです。何が起こったのかを知るには、二度見なければなりません。また、テストを1つだけ実行することはできません(まあ、まだわかりませんでした!)。
しかし、私は間違っているかもしれません-「VSTSを使用して簡単なTDDを行う方法」に関する21のブログ投稿を読んだだけです。私はもっと読むべきでした、あなたは正しいです。
NUnitについては、1つを読みます。そして、私は同じ日にTDDをしていました。楽しみにして。
ところで、私は通常マイクロソフト製品が大好きです。 Visual Studioは開発者が購入できる最高のツールですが、Visual Studio Team SystemのTDDとワークアイテムの管理は本当に残念です。
ではごきげんよう。シルヴァン。
XUnitは、グリーンフィールドプロジェクトのもう1つの可能性です。おそらくより直感的な構文を持っていますが、他のフレームワークとは実際には互換性がありません。
まず、間違ったステートメントを修正します。コマンドラインを使用して、Visual Studioの外部でmsTestを実行できます。 TeamCityなどのいくつかのCIツールでは、NUnitのサポートが強化されています(msTestが一般的になると、おそらく変更されるでしょう)。私の現在のプロジェクトでは両方を使用していますが、唯一の大きな違いは、mstestは常に32ビットとして実行され、NUnitは32ビットまたは64ビットのテストとして実行され、コードが32/64依存のネイティブコードを使用する場合にのみ重要です。
「NUnitファイル構造はVSTestよりも豊富です」というメッセージが表示されました...もちろん、NUnitファイル構造を好む場合は、このソリューションを他の方法で使用できます(NUnit-> VS)。
#if !MSTEST
using NUnit.Framework;
#else
using Microsoft.VisualStudio.TestTools.UnitTesting;
using TestFixture = Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute;
using Test = Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute;
using SetUp = Microsoft.VisualStudio.TestTools.UnitTesting.TestInitializeAttribute;
using TearDown = Microsoft.VisualStudio.TestTools.UnitTesting.TestCleanupAttribute;
#endif
またはその他の変換... :-)ここで使用するのは、コンパイラの別名です。
私はMSTestから始めましたが、1つの簡単な理由で切り替えました。 MSTestは、他のアセンブリからのテストメソッドの継承をサポートしていません。
同じテストを複数回書くという考えが嫌いでした。特に、テストメソッドが数百のテストに簡単に到達できる大規模プロジェクトで。
NUnitは私が必要とすることを正確に行います。 NUnitで不足しているのは、各テストの赤/緑のステータス(VSTSのような)を表示できるVisual Studioアドインだけです。
MSTestまたはnUnitのいずれかを検討している場合は、mbUnitを確認することをお勧めします。私の理由は
私はもともと[RowTest ....]機能のためにmbUnitを選択しましたが、戻る理由は1つも見つかりませんでした。すべてのアクティブなテストスイートをnUnitから移動しましたが、振り返ることはありませんでした。それ以来、2つの異なる開発チームを特典に変えました。
VS組み込みのテストフレームワークは好きではありません。テストするプロジェクトの一部としてテストを行うのではなく、別のプロジェクトを作成する必要があるからです。
MSTestは基本的にNUnitをわずかに作り直し、いくつかの新機能(フィクスチャとテストレベルだけでなく、アセンブリのセットアップと分解など)を備えており、いくつかのベストビット(新しい2.4制約構文など)が欠落しています。 NUnitはより成熟しており、他のベンダーからより多くのサポートを受けています。もちろん、常に無料であるため(MSTestは2008年のProfessionalバージョンになりましたが、それ以前はより高価なSKUでした)、ほとんどのALT.NETプロジェクトで使用されています。
そうは言っても、Microsoftのラベルが付いていないもの、特にOSSコードを使用することに非常に消極的な企業があります。したがって、公式のMSテストフレームワークを用意することは、これらの企業がテストを受ける必要がある動機かもしれません。正直なところ、重要なのはテストであり、使用するツールではありません(および Tuomas Hietanenのコード を使用すると、テストフレームワークをほぼ交換可能にできます)。
.NET 4.0の Code Contractsシステム のリリースと staticチェッカー の可用性により、理論的にはより少ないテストケースを記述し、 Pex のようなツールは、これらのケースを識別するのに役立ちます。これを手近な議論に関連して、契約があなたの尻尾をカバーしているためにユニットテストでより少なくする必要があるなら、それは管理するための1つの少ない依存性であるので、先に進んでビルトインピースを使用してはどうですか?最近では、シンプルさがすべてです。 :-)
こちらもご覧ください:
私はMSの小さなテストフレームワークを使用したいと思いますが、今のところはNUnitに固執しています。 MSの問題は一般に(私にとって)
警告-aspxサイトをテストしている場合、私は間違いなく MSを使用します-ソロを開発している場合、MSも大丈夫です-スキルが制限されていて、NUnitを構成できなかった場合:)
テストを書いて、NUnitGUIまたは他のフロントエンドの1つを起動する方がはるかに簡単です(testDrivenははるかに高すぎます)。コマンドラインバージョンでのデバッグのセットアップも非常に簡単です。