web-dev-qa-db-de.com

NUnit vs. MbUnit vs. MSTest vs. xUnit.net

Für .NET gibt es eine ganze Menge nicht zu testender Frameworks. Ich habe diesen kleinen Funktionsvergleich gefunden: http://xunit.github.io/docs/comparisons.html

Jetzt soll ich die beste für uns auswählen. Aber wie? Ist das wichtig? Welches ist das zukunftssicherste und hat einen ordentlichen Schwung dahinter? Sollte ich mich um die Funktionen kümmern? Während xUnit am modernsten und speziell für .NET entworfen zu sein scheint, scheint NUnit wieder dasjenige zu sein, das weithin akzeptiert wird. MSTest ist wieder in Visual Studio integriert ...

378
bitbonk

Ich weiß, dass dies ein alter Thread ist, aber ich dachte, ich würde eine Stimme für xUnit.NET abgeben. Während die meisten anderen erwähnten Test-Frameworks fast alle gleich sind, hat xUnit.NET einen einzigartigen, modernen und flexiblen Ansatz für Unit-Tests gewählt. Die Terminologie wird geändert, sodass Sie TestFixtures und Tests nicht mehr definieren. Sie geben Fakten und Theorien zu Ihrem Code an, die sich besser in das Konzept eines Tests aus TDD/BDD-Sicht integrieren lassen.

xUnit.NET ist auch EXTREM erweiterbar. Die Attributklassen FactAttribute und TraitAttribute sind nicht versiegelt und bieten überschreibbare Basismethoden, mit denen Sie steuern können, wie die von diesen Attributen dekorierten Methoden ausgeführt werden sollen. Während Sie mit xUnit.NET in der Standardform Testklassen schreiben können, die mit den Testmethoden von NUnit-Testgeräten vergleichbar sind, sind Sie überhaupt nicht auf diese Form des Komponententests beschränkt. Es steht Ihnen frei, das Framework so zu erweitern, dass es BDD-ähnliche Bedenken-/Kontext-/Beobachtungsspezifikationen unterstützt (siehe Abbildung hier .

xUnit.NET unterstützt mit seinem Theory-Attribut und den entsprechenden Datenattributen auch das sofortige Testen nach dem Fit-Prinzip. Fit-Eingabedaten können aus Excel, einer Datenbank oder sogar einer benutzerdefinierten Datenquelle wie einem Word-Dokument geladen werden (durch Erweitern des Basisdatenattributs). Auf diese Weise können Sie sowohl für Komponententests als auch für Integrationstests eine einzige Testplattform nutzen kann bei der Reduzierung von Produktabhängigkeiten und erforderlichen Schulungen eine große Rolle spielen.

Andere Testansätze können auch mit xUnit.NET implementiert werden ... die Möglichkeiten sind nahezu unbegrenzt. In Kombination mit einem weiteren sehr zukunftsweisenden Spott-Framework, Moq , bilden die beiden eine sehr flexible, erweiterbare und leistungsstarke Plattform für die Implementierung automatisierter Tests.

195
jrista

NUnit wird wahrscheinlich am meisten von Tools von Drittanbietern unterstützt. Es ist auch schon länger als die anderen drei.

Ich persönlich interessiere mich nicht für Unit-Test-Frameworks, spöttische Bibliotheken sind meiner Meinung nach viel wichtiger (und sperren Sie in viel mehr). Einfach eins auswählen und dabei bleiben.

133

Ich würde nicht mit MSTest gehen. Obwohl es wahrscheinlich der zukunftssicherste Beweis für die Frameworks von Microsoft ist, ist es nicht die flexibelste Lösung. Ohne ein paar Hacks läuft es nicht alleine. Die Ausführung auf einem anderen Build-Server als TFS ohne die Installation von Visual Studio ist daher schwierig. Der Visual Studio-Testläufer ist tatsächlich langsamer als Testdriven.Net + eines der anderen Frameworks. Und da die Versionen dieses Frameworks an Versionen von Visual Studio gebunden sind, gibt es weniger Updates. Wenn Sie mit einem älteren VS arbeiten müssen, sind Sie an einen älteren MSTest gebunden.

Ich denke nicht, dass es wichtig ist, welches der anderen Frameworks Sie verwenden. Es ist wirklich einfach, von einem zum anderen zu wechseln.

Ich persönlich benutze XUnit.Net oder NUnit, je nach den Vorlieben meiner Mitarbeiter. NUnit ist der Standard. XUnit.Net ist das schlankste Framework.

106
Mendelt

Erwägen Sie, MSTest durch ein anderes Testframework zu ergänzen und nicht zu ersetzen. Sie können die Visual Studio MSTest-Integration beibehalten und gleichzeitig die Vorteile eines umfassenderen Testframeworks nutzen.

Zum Beispiel verwende ich xUnit mit MSTest. Fügen Sie einen Verweis auf die xUnit.dll-Assembly hinzu, und führen Sie einfach so etwas aus. Überraschenderweise funktioniert es einfach!

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);
        }
    }
}
20
Matt Crouch

Nunit funktioniert nicht gut mit Mixed-Mode-Projekten in C++, also musste ich es fallen lassen

8
Eric

Es ist keine große Sache im kleinen/persönlichen Maßstab, aber es kann schnell eine große Sache im großen Maßstab werden. Mein Arbeitgeber ist ein großer Microsoft-Shop, kann sich aber aus mehreren Gründen nicht für Team System/TFS entscheiden. Wir verwenden derzeit Subversion + Orcas + MBUnit + TestDriven.NET und es funktioniert gut, aber TD.NET zu bekommen war ein riesiger Aufwand. Die Versionssensitivität von MBUnit + TestDriven.NET ist auch ein großes Problem, und es ist nicht trivial, eine zusätzliche kommerzielle Sache (TD.NET) für die rechtliche Prüfung und Beschaffung zu haben, um sie zu handhaben und zu verwalten. Mein Unternehmen ist, wie viele andere Unternehmen, sehr zufrieden mit einem MSDN-Abonnement-Modell und es ist einfach nicht daran gewöhnt, einmalige Beschaffungen für Hunderte von Entwicklern abzuwickeln. Mit anderen Worten, das vollständig integrierte MS-Angebot ist meiner Meinung nach ein erheblicher Mehrwert, obwohl es definitiv nicht immer das beste Brot ist.

Ich denke, wir werden bei unserem aktuellen Schritt bleiben, weil er funktioniert und wir den Buckel organisatorisch bereits überwunden haben, aber ich wünschte mir wirklich, MS hätte ein überzeugendes Angebot in diesem Bereich, damit wir unseren Entwickler-Stack ein wenig konsolidieren und vereinfachen könnten.

8
user8133

Es ist keine große Sache, es ist ziemlich einfach, zwischen ihnen zu wechseln. MSTest integriert zu werden ist auch keine große Sache, schnappen Sie sich einfach testdriven.net.

Wie die vorherige Person sagte, wählen Sie einen spöttischen Rahmen, ist mein Favorit im Moment Moq.

7
Bugg