xUnit / NUnit für C# (.NET): Vollständiger Leitfaden mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Was ist diese Bibliothek und wozu wird sie benötigt

\n\n

xUnit und NUnit sind die beiden beliebtesten Bibliotheken für Modultests (Unit Testing) im .NET-Ökosystem (C#, F#, VB.NET). Sie ermöglichen Entwicklern, automatisierte Tests zu schreiben, die die Korrektheit einzelner Programmmodule (Klassen, Methoden, Funktionen) überprüfen.

\n\n

Wozu wird dies benötigt?

\n
    \n
  • Fehlererkennung in frühen Phasen: Tests werden nach jeder Codeänderung ausgeführt, sodass Regressionen (wenn neuer Code alte Funktionalität zerstört) sofort erkannt werden.
  • \n
  • Refactoring ohne Angst: Sie können Code bedenkenlos umschreiben, wenn Sie sicher sind, dass die Tests ihn abdecken. Bestehen die Tests, funktioniert alles wie zuvor.
  • \n
  • Dokumentation in Aktion: Tests zeigen, wie eine bestimmte Methode verwendet werden soll, welche Parameter sie akzeptiert und was sie zurückgibt.
  • \n
  • CI/CD-Integration: Tests werden vor dem Deployment automatisch auf Build-Servern (GitHub Actions, Azure DevOps, Jenkins) ausgeführt.
  • \n
\n\n

Unterschied zwischen xUnit und NUnit:

\n
    \n
  • NUnit – eine ältere Bibliothek (Port von Java JUnit), verwendet die Attribute [Test], [SetUp], [TearDown]. Verfügt über einen umfangreichen Satz an Attributen für Parametrisierung.
  • \n
  • xUnit – eine modernere Bibliothek, erstellt vom Autor von NUnit. Verwendet das Attribut [Fact] für normale Tests und [Theory] für parametrisierte Tests. Zeichnet sich durch einen strengeren Ansatz zur Testisolierung aus (jeder Test erhält eine neue Instanz der Klasse).
  • \n
\n\n

In diesem Artikel betrachten wir beide Bibliotheken, legen den Schwerpunkt jedoch auf xUnit, da es von Microsoft für neue Projekte empfohlen wird.

\n\n

Installation

\n\n

Die Installation erfolgt über den NuGet-Paketmanager. Sie können die Paket-Manager-Konsole (Package Manager Console) oder die .NET CLI verwenden.

\n\n

Installation von xUnit

\n
// Über .NET CLI\ndotnet add package xunit\ndotnet add package xunit.runner.visualstudio\n\n// Über Package Manager Console\nInstall-Package xunit\nInstall-Package xunit.runner.visualstudio
\n\n

Installation von NUnit

\n
// Über .NET CLI\ndotnet add package NUnit\ndotnet add package NUnit3TestAdapter\n\n// Über Package Manager Console\nInstall-Package NUnit\nInstall-Package NUnit3TestAdapter
\n\n

Wichtig: Zum Ausführen von Tests in Visual Studio oder Rider muss auch ein Test-Runner-Adapter installiert werden (z. B. xunit.runner.visualstudio oder NUnit3TestAdapter).

\n\n

Schnellstart mit Codebeispiel

\n\n

Angenommen, wir haben eine einfache Klasse Calculator mit der Methode Add. Schreiben wir Tests dafür in xUnit und NUnit.

\n\n

Zu testende Klasse (Calculator.cs)

\n
public class Calculator\n{\n    public int Add(int a, int b)\n    {\n        return a + b;\n    }\n\n    public int Divide(int a, int b)\n    {\n        if (b == 0)\n            throw new DivideByZeroException("Division durch Null ist nicht erlaubt!");\n        return a / b;\n    }\n}
\n\n

Test mit xUnit (CalculatorTests.cs)

\n
using Xunit;\n\npublic class CalculatorTests\n{\n    [Fact]\n    public void Add_ShouldReturnSum_WhenTwoPositiveNumbers()\n    {\n        // Arrange (Vorbereitung)\n        var calculator = new Calculator();\n        int a = 5;\n        int b = 3;\n\n        // Act (Aktion)\n        int result = calculator.Add(a, b);\n\n        // Assert (Überprüfung)\n        Assert.Equal(8, result);\n    }\n\n    [Fact]\n    public void Divide_ShouldThrowException_WhenDivideByZero()\n    {\n        var calculator = new Calculator();\n\n        Assert.Throws<DivideByZeroException>(() => calculator.Divide(10, 0));\n    }\n}
\n\n

Test mit NUnit (CalculatorTest

Empfehlungen