NUnitとxUnit


109

NUnitxUnit.netの違いは何ですか?1つだけでなく2つを開発する意味は何ですか?

私はxUnitがNUnitの発明者によって開発されていることを読みました:

xUnit.netは、.NET Frameworkの単体テストツールです。NUnit の最初の発明者によって書かれまし

一方:

NUnitは、すべての.Net言語のユニットテストフレームワークです。現在の製品リリースバージョン2.6は、このxUnitベースのユニットテストツールの 7番目のメジャーリリースです。

それで、真実はどこにありますか?


3
@Joeyが指摘したように、これはリンクされた質問の単純な複製ではありません。この場合、OPは基本的に何かを誤解しています。つまり、xUnit.net-ユニットテストツールとx Unit-ユニットテストフレームワークのクラス(nUnit、jUnitなど)の一般的な用語の違いです。再オープンへの投票。
Rob Levine

回答:


130

この回答の執筆時点での最新のNUnitバージョンはv3.5で、xUnit.netはv2.1です。

どちらのフレームワークも素晴らしく、どちらも並列テスト実行をサポートしています(ただし、方法は異なります)。NUnitは2002年から存在し、広く使用され、十分に文書化されており、大きなコミュニティーを持っています。一方、xUnit.netはより近代的で、TDDに準拠し、拡張性が高く、.NET Core開発のトレンドでもあります。それも十分に文書化されています。

それに加えて、私が気付いた主な違いは、xUnit.netがテストメソッドを実行する方法です。したがって、NUnitにはテストクラスと一連のテストメソッドがあります。NUnitはテストクラスの新しいインスタンスを作成し、同じインスタンスからすべてのテストメソッドを実行します。一方、xUnit.netは、各テストメソッドのテストクラスの新しいインスタンスを作成します。。したがって、フィールドやプロパティを使用してテストメソッド間でデータを共有することはできません。これは、私たちのテストメソッドが相互に依存しているため、TDDでは受け入れられないためです。したがって、xunit.netを使用する場合、テストメソッドが完全に分離されていることを確認できます。

ただし、テストメソッド間で一部のデータを共有する場合は、xUnitを使用して共有できます。したがって、デフォルトではすべてのテストメソッドが完全に分離されていますが、特定のケースでは意図的にこの分離を解除できます。私はこの態度を好みます、それが私がそれをより好きにする理由です。


4
詳細については、私の最新の投稿を確認してください。codopia.wordpress.com
2017/02/20

1
並列実行について書いた内容は正しくありません。多分それはあなたの投稿の時だったかもしれませんが、今はそうではありません。このxunit.net/docs/running-tests-in-parallelを確認してください。1つのクラスのテストメソッドが並列に実行されることは決してないということです。
ゴンディル

@Gondilに感謝します。そうです、単一のクラスのメソッドを並行して実行することはありません。並列処理ビットを調整しました
akazemis

1
xUnitが「十分に文書化されている」ことをどのようにして見つけたのかはわかりません。すべての情報は、NUnitのように優れたドキュメントではなく、コミュニティソースとstackoverflowの質問を通じて見つける必要があります。私はあなたの答えの後でxUnitに本当に興奮していましたが、NUnitは.NET Coreでもうまく機能しているように思われました。
CularBytes

1
@Loaderon約4年前にそれを投稿し、それ以来xunitを今まで使用してきました。ドキュメントとコミュニティは以前よりもはるかに優れており、現在は成熟しています。したがって、安心してXUnitを使用してください。NUnitにフォールバックする必要はありません。:)
akazemis

33

単一のツールの名前(xUnit.net)とユニットテストフレームワークのクラス全体の名前(xUnitxは JUnit、NUnitなどの言語/環境を指します)と混同しています。


1
残念ながら、これは完全に複製されたものではないため、クローズされました。
Rob Levine

混乱しないように、タイトルを少し変更しました。
ルスラン

1
タイトルではなく、質問の引用部分の強調表示された部分を示しました。しかし、おそらく私はあなたを誤解しました。
Joey

8

xUnitプロ:

xUnitは、古い「SetUp」および「TearDown」メソッドを回避することにより、新しい概念に従います。.NET開発者と同じように、IDisposableとコンストラクターを使用する必要があります。また、xUnitには明確なコンテキスト共有の概念があります。

xUnit短所:

テストコンテキストを取得する機能はまだ実装されていません。


1
「テストコンテキスト」とは何ですか?今では実装されていますか?
Peter Mortensen

8

xUnitの利点の1つは、異なるクラスのテストを見つけることです。それらは並列に実行されます。多くのテストケースがある場合、これは多くの時間を節約できます。

もちろん、これをオフにしたり、操作(スレッド数、クラスごとのスレッド、アセンブリごとのテストなど)を制御したりできます。

2つのテストプロジェクトでこのサンプルソリューションをチェックしてください。1つはxUnitを使用し、もう1つはNUnitを使用しています

xUnit での並列テストの詳細については、こちらをご覧ください


xunitには、同じクラスでテストを並行して実行する他の方法がありますか?
Magesh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.