NUnit対MbUnit対MSTest対xUnit.net [終了]


390

.NET用の単体テストフレームワークは非常にたくさんあります。私はこの小さな機能比較を見つけました:http : //xunit.github.io/docs/comparisons.html

今、私たちは私たちに最適なものを選ぶことになっています。しかし、どうやって?それは重要ですか?最も将来性のあるもので、その背後にまともな勢いがあるのはどれですか。機能について気にする必要がありますか?xUnitは最も近代的で.NET用に特別に設計されているようですが、NUnitも広く受け入れられているようです。MSTestは再びVisual Studioに統合されています...


11
その比較表は年が古くなっています。たとえば、NUnitにもAssert.Throwsなどがあり、Assertionsテーブルのすべてが古いAPIです。新しいAssert.That(...、Is ....)の流暢な構文は、はるかに優れており、今のところずっと存在しています。
ジムクーパー、

11
より最新のテーブルを知っていますか?
bitbonk

1
2013年後半、xUnit.net => NUnitから移動。また、xUnit.NET(プロジェクト)!= xUnit(NUnitがメンバーであるカテゴリー)
DeepSpace101

3
@ xidy.netから移動した理由=> NUnit?
Alexander Logger 2013年

回答:


197

私はこれが古いスレッドであることを知っていますが、xUnit.NETへの投票を投稿すると思いました。言及されている他のほとんどのテストフレームワークはほとんど同じですが、xUnit.NETはユニットテストに対して非常にユニークで最新の柔軟なアプローチを採用しています。これは用語を変更するため、TestFixturesとTestsを定義する必要がなくなります...コードに関するファクトと理論を指定します。これにより、TDD / BDDの観点からのテストの概念とよりよく統合されます。

xUnit.NETも非常に拡張可能です。そのFactAttributeおよびTraitAttribute属性クラスは封印されておらず、オーバーライド可能な基本メソッドを提供します。これらのメソッドは、これらの属性を修飾するメソッドの実行方法を詳細に制御できます。デフォルトの形式のxUnit.NETを使用すると、NUnitテストフィクスチャと同様のテストクラスをテストメソッドで作成できますが、この形式のユニットテストに限定されることはありません。ここに示すように、BDDスタイルの懸念/コンテキスト/監視仕様をサポートするようにフレームワークを自由に拡張できます

xUnit.NETは、Theory属性と対応するデータ属性を使用して、ボックスから直接フィットスタイルのテストもサポートします。フィット入力データは、Excel、データベース、またはWordデータなどのカスタムデータソースからでも(基本データ属性を拡張することで)読み込むことができます。これにより、単体テストと統合テストの両方で単一のテストプラットフォームを活用できます。製品の依存関係と必要なトレーニングを削減するのに非常に大きな影響を与える可能性があります。

テストへの他のアプローチもxUnit.NETで実装できます...可能性はかなり無限です。2つの非常に前向きなモックフレームワークであるMoqと組み合わせると、自動テストを実装するための非常に柔軟で拡張可能な強力なプラットフォームが作成されます。


35
これは1年以上前にも当てはまりましたが、NUnitは問題の属性のほとんどを追加しています。NUnitでは、どちらの方法でもテストを記述できます。
Mark Levison、2010年

8
使用可能な属性についてはそれほどではありませんが、どのように使用できるかについてです。xUnit.NETは、特定のテスト方法に縛られることのない非常に柔軟で拡張可能なフレームワークになるようにゼロから設計されており、コアフレームワークを定期的に更新して最新の機能を取得する必要はありません。
jrista 2010年

9
1.属性の見た目が異なる名前は、あまり意味がありません。2. NUnitは拡張可能で、引き続き拡張可能です:?3.テストのデータ行パラメーターはnunitでサポートされています。以前は、拡張機能でサポートされていました:) 4. NunitとMoqを組み合わせると、同じものが作成されます。5. BDDの場合、多くの単体テストフレームワークと簡単に統合できるspecflowと言えます。
11

8
私はxUnitの音が好きですが、zilchのドキュメントがあります:(
大佐パニック

10
xUnitにはドキュメントがありません。例:Trait実際に何が行われるか、または単一の親テスト内で異なるテストをグループ化できるかどうか(例:tests内のすべてtestfixture)を見つけてみてください。nUnitは、xUnitのテストのフラットビューの代わりに、優れた階層ビューを作成します。さらに、命名法は意味をなさない-事実と理論?リアルに!これらはテストとデータと呼ばれる方がよいでしょう。
DeepSpace101 2012年

134

NUnitはおそらくサードパーティのツールで最もサポートされています。また、他の3つよりも長く使用されています。

個人的には単体テストフレームワークについてはあまり気にせず、モックライブラリーの方がIMHOの方がはるかに重要です(そして、はるかにロックされます)。ただ1つを選んで、それに固執してください。


3
あなたの一番のモックライブラリーは何ですか?
dplante 2009年

31
Moqが好きです、RhinoMocksもいいです。
Alexander Kojevnikov、2009年

5
PexとMolesを確認することも価値があるかもしれません。ほくろの部分は特にモックに役立ちます。
Charles Prakash Dasari、

4
MSPec with FakeItEasy ...テストケースを読みやすくする
Robie

5
NSubstituteとAutoFixtureを備えたMSpecが私の選択です。
Daniel Hilgarth、2012年

108

MSTestは使用しません。これはおそらく、Microsoftの背後にあるフレームワークの最も将来的な証拠となるものですが、最も柔軟なソリューションではありません。それはいくつかのハックなしではスタンドアロンで動作しません。したがって、Visual StudioをインストールせずにTFS以外のビルドサーバーで実行するのは困難です。ビジュアルスタジオのテストランナーは、実際にはTestdriven.Net +その他のフレームワークよりも低速です。また、このフレームワークのリリースはVisual Studioのリリースに関連付けられているため、更新が少なく、古いVSで作業する必要がある場合は、古いMSTestに関連付けられています。

他のどのフレームワークを使用するかはそれほど重要ではないと思います。簡単に切り替えることができます。

個人的には、同僚の好みに応じてXUnit.NetまたはNUnitを使用しています。NUnitが最も標準的です。XUnit.Netは最も無駄のないフレームワークです。


36
私はこれと同じ結論に蹴りと叫んで引きずられてきました。MSTestはVisual Studioと統合されているため、本当に使いたかったのですが、それも弱点です。Microsoft以外のビルドサーバーでテストを実行する必要があり、それを取得するためだけにVisual Studioをインストールする方法はありません。マイクロソフトが優れたツールを作成し、それをほとんど達成できないのは残念です。
Tim Long

11
MSTestであるひどいことを呼び出すための+1。結局のところ、MSTestでない限り、どの単体テストフレームワークを使用してもかまいません
Mike Mooney

21

MSTestを別のテストフレームワークで置き換えるのではなく、補足することを検討してください。Visual Studio MSTestの統合を維持しながら、よりフル機能のテストフレームワークの利点を活用できます。

たとえば、MSTestで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、MBUnit、または他の回答で言及されている他のテストフレームワークでも機能する可能性がありますが、まだ試していません。
Matt Crouch 2012

1
この方法でパラメーター化されたテストをMSTestで動作させることができると思いますか、マット?
DevDave 2013年

@DevDaveいいえ。彼の例では、彼は別のアセンブリのクラスを使用しました。パラメータ化されたテストが必要な場合は、MSTestを拡張するために特別に構築された別のテストフレームワークが必要になります。
zoran404

3
Suprisingly, it just works!別のアセンブリから静的関数を呼び出しました。それが機能するのになぜ驚いているのですか?また、そのために特別に作成されたアセンブリを使用しないというアサーションが必要な場合はどうでしょうか。
zoran404

9

NunitはC ++の混合モードプロジェクトではうまく機能しないため、削除する必要がありました


3
私はこの答えを誇りに思っていませんが、そのプロジェクトの単体テストを中止しました。エラーの実行時検出のために、多くの検証手順を作成しました
Eric

2
NUnitを混合モードで使用したいと思っていましたが、それでも不十分であることがわかりました。結局、優れたC ++ユニットテストフレームワークであり、セットアップが簡単なgoogletestを選びました。
チリトム

8

小規模または個人的な規模では大したことではありませんが、大規模ではすぐに大規模な取引になる可能性があります。私の雇用主は大規模なマイクロソフトショップですが、いくつかの理由により、Team System / TFSを購入できません。現在Subversion + Orcas + MBUnit + TestDriven.NETを使用していますが、うまく機能しますが、TD.NETを入手するのは非常に面倒でした。MBUnit + TestDriven.NETのバージョンの機密性も非常に面倒であり、法的に検討および調達して処理および管理するための1つの追加の商用(TD.NET)を持つことは簡単ではありません。私の会社は、多くの会社と同様に、MSDNサブスクリプションモデルに太っていて満足しています。何百人もの開発者が1回限りの調達を処理することには慣れていません。言い換えれば、完全に統合されたMSの提供は、間違いなく常に最良のものとは限りませんが、私の意見では重要な付加価値です。

現在のステップは機能し、組織的にすでに問題を克服しているので、私たちは現在のステップに留まると思いますが、開発スタックを少し統合して簡素化できるように、MSがこの分野で説得力のある製品を提供したいと思います。


2
ReSharperはこの分野で魅力的なサービスを提供しています。
リス

7
あなたの答えは好奇心が強く、矛盾しているようです。あなたはあなたが大きなマイクロソフトショップだと言いますが、TFSを使用せず(これが全体のポイントです。TFSがないと垂直統合の利点が得られません)、MSDNサブスクリプションモデルを使用しますが、 -MSアプローチ。私は正直言って迷っています。残念ながら、時代遅れの答えです。
nicodemus13

6

それは大したことではありません、それらを切り替えるのはとても簡単です。統合されているMSTestも大したことではありません。testdriven.netを入手してください。

以前の人があざけるフレームワークを選ぶと言ったように、現時点で私のお気に入りはMoqです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.