web-dev-qa-db-ja.com

NUnit対MbUnit対MSTest対xUnit.net

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

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

373
bitbonk

私はこれが古いスレッドであることを知っていますが、 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つは自動テストを実装するための非常に柔軟で、拡張性があり、強力なプラットフォームを作成します。

192
jrista

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

私は個人的にはユニットテストフレームワークについてはあまり気にしません。モックライブラリーは私見のほうがはるかに重要です(そして、あなたをもっと閉じ込めます)。ひとつだけ選んでそれを使い続けてください。

131

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

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

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

105
Mendelt

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);
        }
    }
}
19
Matt Crouch

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

8
Eric

小規模/個人規模では大したことではありませんが、大規模ではすぐに大規模になります。私の雇用主はMicrosoftの大規模なショップですが、いくつかの理由でTeam System/TFSを購入しない、または購入できません。現在Subversion + Orcas + MBUnit + TestDriven.NETを使用していますが、うまく機能しますが、TD.NETを取得するのは非常に面倒です。 MBUnit + TestDriven.NETのバージョンの感度も大きな面倒です。また、法的およびレビューと調達のための1つの追加の商業的なもの(TD.NET)を処理および管理することは簡単ではありません。私の会社は、多くの企業と同様に、MSDNサブスクリプションモデルに太っていて満足しており、何百人もの開発者の一括調達の処理に慣れていないだけです。言い換えれば、完全に統合されたMSの提供は、必ずしも最高のパンとは限りませんが、私の意見では重要な付加価値です。

私たちは現在のステップに留まると思いますが、それは機能し、組織的にすでにハンプを克服しましたが、MSがこのスペースに魅力的な製品を提供し、開発スタックを少し統合して簡素化できることを願っています。

8
user8133

大したことではなく、それらを切り替えるのはとても簡単です。統合されるMSTestも大した問題ではなく、testdriven.netを入手するだけです。

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

7
Bugg