Was ist das beste Unit-Test-Framework für .NET und warum? [geschlossen]

26

Es scheint mir, dass jeder NUnit benutzt, ohne die anderen Optionen in Betracht zu ziehen. Ich denke das liegt an:

  • Jeder ist bereits damit vertraut, sodass er keine neue API erlernen muss.
  • Es ist bereits mit dem Continuous Integration Server für die Zusammenarbeit mit NUnit eingerichtet.

Irre ich mich dabei

Ich habe mich kürzlich entschlossen, xUnit in einem meiner eigenen Projekte zu verwenden, und ich liebe es! Für mich ist das viel sinnvoller und konzeptionell scheint es ein klarer Fortschritt von NUnit zu sein.

Ich würde gerne Meinungen darüber hören, welches Framework das beste ist - ohne die Notwendigkeit, es zu lernen oder Ihre automatisierten Tests neu zu konfigurieren.

Niemand
quelle
6
Bitte definieren Sie am besten. Am billigsten? am einfachsten zu codieren? wenigste Codezeilen pro Test? stackoverflow.com/questions/680298/…
Amir Rezaei
Entschuldigung, ich meinte das Mächtigste, Stabilste und Intuitivste, was auch immer. Ich frage nach Meinungen und Gründen warum . Ich überließ es der Vorstellungskraft des Antwortenden, am besten zu sein, denn ich möchte auch sehen, welche dieser Aspekte für die Menschen wichtig sind.
Niemand
2
Wenn Sie Ihre Frage umformulieren können, ist sie möglicherweise in Ordnung. Andernfalls handelt es sich nur um eine "Liste von X" -Fragen, die nicht konstruktiv sind. Siehe sechs Richtlinien für konstruktive subjektive Fragen
ChrisF
2
"best" ist eine blöde Frage - weil es sehr selten ein einzelnes best gibt, teils weil es vom Kontext abhängt, teils weil es unweigerlich subjektiv ist.
Murph
10
Murph. Erstens ist diese Seite für subjektive Fragen. Zweitens frage ich nach Meinungen, um zu sehen, wie andere das Beste interpretieren. Und nenn mich nicht dumm.
Niemand

Antworten:

15

MSTest

Ich persönlich benutze MSTest. NUnit ist wirklich nett, aber in VS2010 ist MSTest bereits vollständig in die IDE integriert und es gibt vollständige Projektvorlagen dafür. Für .NET, wenn Sie 2010 verwenden, ist MSTest der richtige Weg (MSTest in VS2008 ist meines Erachtens nicht auf dem neuesten Stand), nur für die Codeabdeckung, den Test-Runner und andere Tools, die Ihnen zur Verfügung stehen out of the box. (Wenn Sie CodeRush oder R # verwenden, haben sie wirklich großartige Testläufer / Tools für andere Test-Frameworks.)

Edit: Ich bin seitdem zu XUnit übergegangen. : D

Ryan Hayes
quelle
Ich habe sowohl für MbUnit / Galio als auch für diese Antwort gestimmt. MbUnit / Galio ist einfach besser, aber ihre Hände sind gebunden, wenn es darum geht, MsTest-Tests durchzuführen, denn einige kritische Klassen in dieser .Net-Bibliothek sind endgültig und nicht erweiterbar. Wenn Sie jedoch eine GUI-Automatisierung durchführen müssen, funktionieren Coded UI und cuite.codeplex.com/documentation zusätzlich zu MsTest. Sie müssen sie also nur noch verwenden.
Job
2
Das Problem, das ich mit MSTest habe, ist, dass es keine Befehlszeilentests von Haus aus unterstützt. Dies kann ein Problem sein, wenn Sie Einheiten über CI ausführen möchten.
CmdrTallen
1
Nunit ist jetzt vollständig in VS integrierbar, oder?
BKSpurgeon
Ja ist es. In Anbetracht dessen, dass dies nun ungefähr 6 Jahre alt ist, bin ich persönlich zu NUnit und dann zu XUnit gewechselt. Beide (und andere) haben Nuget-Pakete, die als Adapter dienen, um die gleiche VS-Funktionalität wie MSTest zu beleuchten. Ganz ehrlich, MSTest steht an dieser Stelle wahrscheinlich ganz unten auf der Liste. Ich würde XUnit oder NUnit wählen. Heutzutage sind beide solide, gepflegt und modern.
Ryan Hayes
14

Ich habe vor einigen Jahren begonnen, Gallio / MbUnit zu verwenden . Und die Funktionen und Juwelen, die es bietet, sind so mächtig, dass ich meine Wahl nie bereut habe. Tatsächlich bin ich jetzt Teil des Entwicklungsteams des Gallio OSS-Projekts. so kann ich dazu beitragen, es noch fantastischer zu machen.

  • MbUnit hat viele leistungsstarke Funktionen, die meinem Entwickler das Leben erleichtern (Vertragsprüfer, Testfabriken, Strukturvergleich, kombinatorische Tests, Datengenerierungsframework, Textdifferenzierung, XML-Behauptungen, Erweiterungspunkte usw.).
  • Gallio bietet eine konsistente Plattform, um alle meine Tests mit einem netten Reporting-Tool durchzuführen. Ich mag auch die Tatsache, dass ich Tests aus anderen OSS-Projekten integrieren kann, die MbUnit nicht verwenden, und sie einfach ausführen kann. Die nahtlose Integration in viele Tools von Drittanbietern ist ebenfalls praktisch (R #, PoSh, dotCover usw.). Die Erweiterbarkeit der Infrastruktur ist erstaunlich (zum Beispiel habe ich gerade einen Testadapter für ein natives, nicht verwaltetes C ++ - Testframework geschrieben Es wird bald Teil einer zukünftigen Version sein.

Das Wiki ist sicherlich ein guter Ausgangspunkt, um Gallio und MbUnit v3 zu entdecken. Es fehlen noch einige Kapitel, aber es ist schon recht nützlich.

Yann Trevin
quelle
Der Strukturvergleich und das Datengenerierungs-Framework klingen großartig. Kann MbUnit datengesteuertes Testen durchführen - dh CSV / XSD-Dateien lesen und als Argumente für Testmethoden verwenden? Das ist für mich eine der Hauptattraktionen von xunit.
Niemand
Sicher. ASAIK MbUnit war das erste Testframework für .NET, das datengesteuertes Testen einführte. Es kann Testparameter an interne ([Row], [Column] usw.) und an externe ([CsvData], [XmlData] usw.) Datenquellen binden. Weitere Details hier: gallio.org/wiki/doku.php?id=mbunit:data-driven_testing
Yann Trevin
Haben sie die Performance-Probleme behoben, die sie mit Gallio und Visual Studio hatten? War der Deal Killer für uns.
Wyatt Barnett
Ich habe MbUnit verwendet, als ich für eine kleine Firma gearbeitet habe, und es war großartig! Ich habe später MsTest verwendet, weil ich musste, und es hat gut geklappt. Ich bevorzuge es weiterhin, expliziten Code zu schreiben, anstatt Projekteinstellungen zu konfigurieren. Die Unternehmensunterstützung hilft MSTest jedoch. Unabhängig davon, ob das Design hässlich oder schön ist, wissen Sie, dass alles, was aus MSFT herauskommt, gut getestet wird.
Job
@YannTrevin Wie ist der Status von Gallio / MbUnit? Ich habe mir das Google Code-Repository angesehen und es scheint keine aktuellen Änderungen zu geben. Geschieht die Entwicklung woanders oder ist das Projekt ins Stocken geraten?
Wesley Wiser
9

Einen auszuwählen und zu verwenden, ist hier vielleicht der wichtigste Schritt.

Persönlich würde ich aus mehreren Gründen NUnit wählen . In erster Linie ist die Werkzeugunterstützung. Es gibt ein kostenloses Add-In für Visual Studio 2010 , das von allen gängigen Plug-Ins von Drittanbietern unterstützt wird. Jedes einzelne Build-System, Test Coverage Utility und CI-Server unterstützt dies. In vielen Fällen ohne Plugin. Auf Code-Ebene kann es praktisch jedes Szenario verarbeiten - datengesteuerte Tests, Vererbung, abstrakte Testklassen, generische Testklassen, Einrichtung, Herunterfahren usw. In gewissem Maße haben wir xUnit, weil NUnit zu funktionsreich geworden ist und mächtig.

Über NUnit hinaus könnte man, wie von Yann erwähnt, ein ziemlich anständiges Argument für MBUnit + Gallio abgeben - es ist ein sehr solides Framework. Das, was Sie vermeiden sollten, wenn es überhaupt möglich ist, ist MSTest, das meiner Meinung nach einige fatale Mängel aufweist. Fehler sind einige der Einschränkungen Ihrer Testklassen, z. B. keine Vererbung, und Abhängigkeiten von professionellen oder besseren Visual Studio-SKUs. Dazu gehört, dass Visual Studio auf dem Build-Server installiert ist, um die Tests auszuführen.

Wyatt Barnett
quelle
0

Der eine Grund ist, dass NUNIT mehr zum Industriestandard als xUnit geworden ist. Aber ich persönlich liebe xunit.

Cheung
quelle