NUnit対MbUnit対MSTest対xUnit.net [非公開]
-
06-07-2019 - |
質問
.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テストフィクスチャに似たテストクラスを作成できますが、この形式の単体テストに限定されることはありません。 こちら。
xUnit.NETは、Theory属性と対応するデータ属性を使用して、すぐに使えるフィットスタイルのテストもサポートしています。フィット入力データは、Excel、データベース、またはWordドキュメントなどのカスタムデータソースからも読み込むことができます(ベースデータ属性を拡張することにより)。これにより、単体テストと統合テストの両方で単一のテストプラットフォームを活用できます。製品の依存関係と必要なトレーニングを削減するのに非常に役立ちます。
他のテスト方法もxUnit.NETで実装できます...可能性は非常に無限です。別の非常に前向きなモックフレームワーク Moq と組み合わせることで、2つは非常に柔軟で、拡張可能で、強力な自動テストを実装するためのプラットフォーム。
他のヒント
NUnitは、おそらくサードパーティのツールで最もサポートされています。また、他の3つよりも長くなっています。
個人的には単体テストフレームワークについてはあまり気にしません。モックライブラリは私見のほうがはるかに重要です(そして、さらに多くを閉じ込めます)。どれか1つを選んでそれを使い続けるだけです。
MSTestには行きません。これはおそらく、Microsoftの背後にあるフレームワークの最も将来的な証拠ですが、最も柔軟なソリューションではありません。いくつかのハックがなければスタンドアロンで実行されません。そのため、Visual StudioをインストールせずにTFS以外のビルドサーバーで実行するのは困難です。 Visual Studioのテストランナーは、実際にはTestdriven.Net +他のフレームワークよりも低速です。また、このフレームワークのリリースはVisual Studioのリリースに関連付けられているため、更新が少なくなり、古いVSで作業する必要がある場合は、古いMSTestに関連付けられます。
他のどのフレームワークを使用するかは重要ではないと思います。簡単に切り替えることができます。
個人的には同僚の好みに応じてXUnit.NetまたはNUnitを使用しています。 NUnitが最も標準です。 XUnit.Netは最もスリムなフレームワークです。
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);
}
}
}
小規模/個人規模では大したことではありませんが、大規模ではすぐに大規模になる可能性があります。私の雇用主はMicrosoftの大規模なショップですが、いくつかの理由でTeam System / TFSを購入しない、または購入できません。現在Subversion + Orcas + MBUnit + TestDriven.NETを使用していますが、うまく機能しますが、TD.NETを取得するのは非常に面倒です。 MBUnit + TestDriven.NETのバージョンの感度も大きな面倒です。また、法的およびレビューと調達のための1つの追加の商業的なもの(TD.NET)を処理および管理することは簡単ではありません。私の会社は、多くの企業と同様に、MSDNサブスクリプションモデルに太っていて満足しており、何百人もの開発者の一括調達の処理に慣れていないだけです。言い換えれば、完全に統合されたMSの提供は、必ずしも最高のパンとは限りませんが、私の意見では大きな付加価値です。
これは機能し、組織的に既にハンプを克服しているため、現在のステップにとどまると思いますが、MSがこのスペースに魅力的な製品を提供して、開発スタックを統合および簡素化できるようにしたいと思いますビット。
NunitはC ++の混合モードプロジェクトではうまく動作しないため、削除する必要がありました
それは大したことではなく、それらを切り替えるのは非常に簡単です。統合されているMSTestも大した問題ではなく、testdriven.netを入手するだけです。
前の人がモックフレームワークを選ぶと言ったように、現時点で私のお気に入りはMoqです。