401

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

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

4

7 に答える 7

208

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

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

xUnit.NET は、Theory 属性と対応するデータ属性を使用して、すぐに使用できるフィット スタイルのテストもサポートしています。Fit の入力データは、Excel、データベース、または Word 文書などのカスタム データ ソースからも読み込むことができます (基本データ属性を拡張することにより)。これにより、単体テストと統合テストの両方に単一のテスト プラットフォームを活用できます。製品への依存度と必要なトレーニングを大幅に削減できます。

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

于 2009-06-05T20:18:35.037 に答える
136

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

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

于 2008-11-04T07:29:33.233 に答える
109

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

他のどのフレームワークを使用するかはあまり重要ではないと思います。あるものから別のものに切り替えるのは本当に簡単です。

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

于 2008-11-04T09:25:37.243 に答える
22

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);
        }
    }
}
于 2012-09-26T22:58:27.447 に答える
10

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

于 2009-06-05T20:27:35.550 に答える
8

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

機能し、組織的にはすでにこぶを乗り越えているので、現在のステップにとどまると思いますが、開発スタックを少し統合して簡素化できるように、MSがこの分野で魅力的な製品を提供してくれることを願っています.

于 2008-12-29T18:46:54.797 に答える
6

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

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

于 2008-11-04T07:33:33.957 に答える