NUnit vs. xUnit

108

Was sind die Unterschiede zwischen NUnit und xUnit.net ? Was bringt es, zwei davon zu entwickeln, nicht nur einen?

Ich habe gelesen, dass xUnit vom Erfinder von NUnit entwickelt wird:

xUnit.net ist ein Unit-Test-Tool für .NET Framework. Geschrieben vom ursprünglichen Erfinder von NUnit

Andererseits:

NUnit ist ein Unit-Testing-Framework für alle .NET-Sprachen. Die aktuelle Produktionsversion, Version 2.6, ist die siebte Hauptversion dieses xUnit-basierten Unit-Test-Tools

Wo ist also die Wahrheit?

Ruslan
quelle
3
Wie @Joey betont hat, ist dies kein direktes Duplikat der verknüpften Frage. In diesem Fall hat das OP etwas grundlegend missverstanden; nämlich der Unterschied zwischen xUnit.net - dem Unit-Testing-Tool und x Unit - dem verallgemeinerten Begriff für die Klasse der Unit-Testing-Frameworks (nUnit, jUnit usw.). Abstimmung zur Wiedereröffnung.
Rob Levine

Antworten:

128

Zum Zeitpunkt des Schreibens dieser Antwort ist die neueste NUnit-Version v3.5 und xUnit.net v2.1.

Beide Frameworks sind fantastisch und unterstützen paralleles Testen (auf unterschiedliche Weise). NUnit gibt es seit 2002, es ist weit verbreitet, gut dokumentiert und hat eine große Community, während xUnit.net moderner, TDD-adhärenter, erweiterbarer und auch in der .NET Core-Entwicklung im Trend liegt. Es ist auch gut dokumentiert.

Darüber hinaus ist der Hauptunterschied, den ich bemerkt habe, die Art und Weise, wie xUnit.net die Testmethoden ausführt. In NUnit haben wir also eine Testklasse und eine Reihe von Testmethoden. NUnit erstellt eine neue Instanz der Testklasse und führt dann alle Testmethoden von derselben Instanz aus. Während xUnit.net für jede der Testmethoden eine neue Instanz der Testklasse erstellt. . Daher kann man keine Felder oder Eigenschaften verwenden, um Daten zwischen Testmethoden auszutauschen, was eine schlechte Praxis ist, da unsere Testmethoden voneinander abhängig wären, was in TDD nicht akzeptabel ist. Wenn Sie also xunit.net verwenden, können Sie sicher sein, dass Ihre Testmethoden vollständig isoliert sind.

Wenn Sie jedoch bereit sind, einige Daten für Ihre Testmethoden freizugeben, können Sie dies mit xUnit tun. Daher sind standardmäßig alle Testmethoden vollständig isoliert. Sie können diese Isolierung jedoch in bestimmten Fällen absichtlich aufheben. Ich mag diese Einstellung, deshalb mag ich sie besser.

Akazemis
quelle
4
Weitere Informationen finden Sie in meinem letzten Beitrag: codopia.wordpress.com/2017/02/20/…
akazemis
1
Was Sie über die parallele Ausführung schreiben, ist nicht wahr. Vielleicht war es zum Zeitpunkt Ihres Beitrags, aber jetzt ist es nicht. Überprüfen Sie diese xunit.net/docs/running-tests-in-parallel . Es heißt, dass Testmethoden in einer Klasse niemals parallel ablaufen werden.
Gondil
Dank @Gondil haben Sie Recht, es werden keine Methoden einer einzelnen Klasse parallel ausgeführt. optimierte das Parallelitätsbit
Akazemis
1
Ich bin mir nicht sicher, wie Sie herausgefunden haben, dass xUnit "gut dokumentiert" ist, da dies eindeutig nicht der Fall ist. Alle Informationen müssen über Community-Quellen und Stackoverflow-Fragen gefunden werden, anstatt wie bei NUnit eine gute Dokumentation zu haben. Ich war nach Ihrer Antwort wirklich begeistert von xUnit, stellte jedoch fest, dass NUnit auch in .NET Core gut funktioniert.
CularBytes
1
@Loaderon Ich habe das vor ungefähr 4 Jahren gepostet und benutze xunit seitdem bis jetzt. Die Dokumentation und die Community sind viel besser als zuvor und jetzt ausgereifter. Verwenden Sie XUnit also beruhigt, Sie müssen nicht auf NUnit zurückgreifen. :)
Akazemis
32

Sie verwechseln den Namen eines einzelnen Tools ( xUnit.net ) mit dem Namen einer ganzen Klasse von Unit-Testing-Frameworks ( xUnit , das x bezieht sich auf eine Sprache / Umgebung, z. B. JUnit, NUnit, ...).

Joey
quelle
1
Schade, dass dies geschlossen wurde, da es sich nicht um ein direktes Duplikat handelt - Sie haben Recht -, dass das OP zwischen zwei Begriffen verwechselt wurde, die fast gleich sind.
Rob Levine
Ich habe den Titel leicht geändert, um sicherzustellen, dass keine Verwirrung entsteht.
Ruslan
1
Ich habe mich nicht an den Titel gehalten, sondern an die hervorgehobenen Abschnitte der Zitate in Ihrer Frage. Aber vielleicht habe ich dich falsch verstanden.
Joey
8

Ein Vorteil von xUnit ist, dass es Tests in verschiedenen Klassen findet. es läuft sie parallel . Dies kann viel Zeit sparen, wenn Sie viele Testfälle haben.

Sie können dies natürlich deaktivieren oder den Betrieb steuern (Anzahl der Threads, Threads pro Klasse, Tests pro Assembly usw.).

Schauen Sie sich diese Beispiellösung mit zwei Testprojekten an, eines mit xUnit und das andere mit NUnit .

Weitere Informationen zu parallelen Tests in xUnit finden Sie hier .

Rad
quelle
Hat xunit andere Möglichkeiten, Tests in derselben Klasse parallel auszuführen?
Magesh
7

xUnit-Vorteile:

xUnit folgt einem neuen Konzept, indem die alten Methoden "SetUp" und "TearDown" vermieden werden. Es zwingt uns, IDisposable und einen Konstruktor zu verwenden, wie wir es als .NET-Entwickler tun sollten. Auch xUnit hat ein klares Konzept für die gemeinsame Nutzung von Kontexten.

xUnit Nachteile:

Die Verfügbarkeit zum Abrufen des Testkontexts ist noch nicht implementiert.

TakinosaJi
quelle
1
Was ist "Testkontext" ? Wurde es inzwischen implementiert?
Peter Mortensen