.NETには、非常に多くの単体テストフレームワークがあります。この小さな機能の比較を見つけました: http://xunit.github.io/docs/comparisons.html
今、私たちに最適なものを選択します。しかし、どのように?それは重要ですか?どれが最も将来の証拠であり、その背後にまともな勢いがありますか?機能を気にする必要がありますか? xUnitは最も近代的であり、特に.NET向けに設計されているように見えますが、NUnitも広く受け入れられているようです。 MSTestは再びVisual Studioに既に統合されています...
私はこれが古いスレッドであることを知っていますが、 xUnit.NET への投票を投稿すると思いました。言及されている他のテストフレームワークのほとんどはほとんど同じですが、xUnit.NETはユニットテストに対して非常にユニークで、現代的で柔軟なアプローチを採用しています。用語が変わるため、TestFixturesとTestsを定義しなくなります。コードに関するFactsとTheoriesを指定します。これは、TDD/BDDの観点からテストとは何かという概念とよりよく統合されます。
xUnit.NETも非常に拡張可能です。 FactAttributeおよびTraitAttribute属性クラスは封印されておらず、これらの属性を装飾するメソッドの実行方法を制御できるオーバーライド可能な基本メソッドを提供します。 xUnit.NETのデフォルト形式では、テストメソッドを使用してNUnitテストフィクスチャに似たテストクラスを作成できますが、この形式の単体テストに限定されることはありません。 here のように、フレームワークを自由に拡張して、BDDスタイルの懸念/コンテキスト/監視仕様をサポートできます。
xUnit.NETは、Theory属性と対応するデータ属性を使用して、すぐに使えるフィットスタイルのテストもサポートしています。フィット入力データは、Excel、データベース、またはWordドキュメントなどのカスタムデータソースからも読み込むことができます(ベースデータ属性を拡張することにより)。これにより、単体テストと統合テストの両方で単一のテストプラットフォームを活用できます。製品の依存関係と必要なトレーニングを削減するのに非常に役立ちます。
テストの他のアプローチもxUnit.NETで実装できます...可能性は非常に無限です。別の非常に前向きなモックフレームワーク Moq と組み合わせると、2つは自動テストを実装するための非常に柔軟で、拡張性があり、強力なプラットフォームを作成します。
NUnitは、おそらくサードパーティのツールで最もサポートされています。また、他の3つよりも長くなっています。
私は個人的にはユニットテストフレームワークについてはあまり気にしません。モックライブラリーは私見のほうがはるかに重要です(そして、あなたをもっと閉じ込めます)。ひとつだけ選んでそれを使い続けてください。
私はMSTestには行きません。これはおそらく、Microsoftの背後にあるフレームワークの最も将来的な証拠ですが、最も柔軟なソリューションではありません。いくつかのハックがなければスタンドアロンで実行されません。そのため、Visual StudioをインストールせずにTFS以外のビルドサーバーで実行するのは困難です。 Visual Studioのテストランナーは、実際にはTestdriven.Net +他のフレームワークよりも低速です。また、このフレームワークのリリースはVisual Studioのリリースに関連付けられているため、更新が少なくなり、古いVSで作業する必要がある場合は、古いMSTestに関連付けられます。
他のどのフレームワークを使用するかは重要ではないと思います。簡単に切り替えることができます。
私は同僚の好みに応じて個人的にXUnit.NetまたはNUnitを使用しています。 NUnitが最も標準です。 XUnit.Netは最もスリムなフレームワークです。
MSTestを別のテストフレームワークで置き換えることではなく、補足することを検討してください。 Visual Studio MSTestの統合を維持しながら、よりフル機能のテストフレームワークのメリットを享受できます。
たとえば、MSUnitでxUnitを使用します。 xUnit.dllアセンブリへの参照を追加して、このようなことをしてください。驚くべきことに、それはちょうど動作します!
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Assert = Xunit.Assert; // <-- Aliasing the Xunit namespace is key
namespace TestSample
{
[TestClass]
public class XunitTestIntegrationSample
{
[TestMethod]
public void TrueTest()
{
Assert.True(true); // <-- this is the Xunit.Assert class
}
[TestMethod]
public void FalseTest()
{
Assert.False(true);
}
}
}
NunitはC++の混合モードプロジェクトではうまく動作しないため、削除する必要がありました
小規模/個人規模では大したことではありませんが、大規模ではすぐに大規模になります。私の雇用主はMicrosoftの大規模なショップですが、いくつかの理由でTeam System/TFSを購入しない、または購入できません。現在Subversion + Orcas + MBUnit + TestDriven.NETを使用していますが、うまく機能しますが、TD.NETを取得するのは非常に面倒です。 MBUnit + TestDriven.NETのバージョンの感度も大きな面倒です。また、法的およびレビューと調達のための1つの追加の商業的なもの(TD.NET)を処理および管理することは簡単ではありません。私の会社は、多くの企業と同様に、MSDNサブスクリプションモデルに太っていて満足しており、何百人もの開発者の一括調達の処理に慣れていないだけです。言い換えれば、完全に統合されたMSの提供は、必ずしも最高のパンとは限りませんが、私の意見では重要な付加価値です。
私たちは現在のステップに留まると思いますが、それは機能し、組織的にすでにハンプを克服しましたが、MSがこのスペースに魅力的な製品を提供し、開発スタックを少し統合して簡素化できることを願っています。
大したことではなく、それらを切り替えるのはとても簡単です。統合されるMSTestも大した問題ではなく、testdriven.netを入手するだけです。
前の人がモックフレームワークを選ぶと言ったように、現時点で私のお気に入りはMoqです。