Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieses Tutorial führt Sie interaktiv Schritt für Schritt durch das Erstellen einer Beispielprojektmappe, um die Konzepte von Komponententests zu erlernen.
In diesem Artikel wird ein .NET Core-Projekt getestet. Wenn Sie ein ASP.NET Core-Projekt testen, finden Sie weitere Informationen unter Integrationstests in ASP.NET Core.
Prerequisites
- .NET 10 SDK oder spätere Versionen.
- Ein Text-Editor oder Code-Editor Ihrer Wahl.
TUnit basiert vollständig auf Microsoft. Testing.Platform (MTP) und unterstützt VSTest nicht. In diesem Lernprogramm wird der MTP-Modus verwendet, der dotnet testdas .NET 10 SDK erfordert.
Erstellen des Quellprojekts
Öffnen eines Shell-Fensters. Erstellen Sie ein Verzeichnis namens unit-testing-using-tunit, um die Lösung zu speichern. Führen Sie in diesem neuen Verzeichnis den folgenden Befehl aus, um eine neue Lösungsdatei für die Klassenbibliothek und das Testprojekt zu erstellen:
dotnet new sln
Erstellen Sie als Nächstes ein PrimeService-Verzeichnis . Die folgende Gliederung zeigt bisher die Verzeichnis- und Dateistruktur:
/unit-testing-using-tunit
unit-testing-using-tunit.slnx
/PrimeService
Stellen Sie PrimeService zum aktuellen Verzeichnis, und führen Sie den folgenden Befehl aus, um das Quellprojekt zu erstellen:
dotnet new classlib
Benennen Sie Class1.cs in PrimeService.cs um. Sie erstellen eine fehlerhafte Implementierung der Klasse PrimeService.
using System;
namespace Prime.Services
{
public class PrimeService
{
public bool IsPrime(int candidate)
{
throw new NotImplementedException("Please create a test first.");
}
}
}
Wechseln Sie zurück in das Verzeichnis unit-testing-using-tunit. Führen Sie den folgenden Befehl aus, um das Klassenbibliotheksprojekt zur Projektmappe hinzuzufügen:
dotnet sln add PrimeService/PrimeService.csproj
Erstellen des Testprojekts
Erstellen Sie als Nächstes das Verzeichnis PrimeService.Tests. Die folgende Gliederung zeigt die Verzeichnisstruktur:
/unit-testing-using-tunit
unit-testing-using-tunit.slnx
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Die TUnit-Projektvorlagen sind nicht im .NET SDK enthalten. Installieren Sie sie mit dem folgenden Befehl:
dotnet new install TUnit.Templates
Ändern Sie das Verzeichnis in das Verzeichnis "PrimeService.Tests ", und erstellen Sie ein neues Projekt mit dem folgenden Befehl:
dotnet new TUnit
Note
Bei Kurznamen von Vorlagen wird die Groß-/Kleinschreibung beachtet. Verwenden Sie TUnit, nicht tunit.
Der Befehl dotnet new erstellt ein Testprojekt, das TUnit als Testbibliothek verwendet. Die generierte Datei PrimeService.Tests.csproj ist ein ausführbares Projekt, das auf das TUnit Paket verweist (die Versionsnummer kann abweichen):
<PropertyGroup>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="TUnit" Version="1.*" />
</ItemGroup>
Das TUnit Paket enthält das Testframework, die Assertionsbibliothek und den MTP-Testläufer, sodass das Projekt keine anderen Testpakete benötigt. Die Vorlage fügt außerdem Beispieltests hinzu. Löschen Sie alle .cs-Dateien und das Data-Verzeichnis aus dem PrimeService.Tests-Verzeichnis, da dieses Lernprogramm sie durch eigene Tests ersetzt.
Fügen Sie nun die PrimeService Klassenbibliothek als weitere Abhängigkeit zum Projekt hinzu. Verwenden Sie den Befehl dotnet reference add:
dotnet reference add ../PrimeService/PrimeService.csproj
Die folgende Gliederung zeigt das endgültige Lösungslayout:
/unit-testing-using-tunit
unit-testing-using-tunit.slnx
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Test Source Files
PrimeService.Tests.csproj
Führen Sie den folgenden Befehl im Verzeichnis unit-testing-using-tunit aus:
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.csproj
Konfigurieren des MTP-Modus von dotnet test
Da TUnit VSTest nicht unterstützt, muss dotnet test im MTP-Modus ausgeführt werden. Erstellen Sie im unit-testing-using-tunit-Verzeichnis eine global.json-Datei mit folgendem Inhalt:
{
"test": {
"runner": "Microsoft.Testing.Platform"
}
}
Weitere Informationen finden Sie im MTP-Modus des Dotnet-Tests.
Erstellen des ersten Tests
Sie schreiben einen fehlerhaften Test, lassen ihn als bestanden gelten und wiederholen dann den Prozess. Erstellen Sie im Verzeichnis "PrimeService.Tests " eine PrimeService_IsPrimeShould.cs Datei mit dem folgenden Code:
namespace Prime.UnitTests.Services
{
using Prime.Services;
public class PrimeService_IsPrimeShould
{
private readonly PrimeService _primeService = new();
[Test]
public async Task IsPrime_InputIs1_ReturnFalse()
{
var result = _primeService.IsPrime(1);
await Assert.That(result).IsFalse();
}
}
}
Das [Test] Attribut gibt an, dass es sich bei einer Methode um eine Testmethode handelt. TUnit benötigt kein Attribut an der Klasse. TUnit-Assertionen sind asynchron, daher gibt die Testmethode ein Task zurück und wartet auf Assert.That. Das TUnit Paket fügt globale using Direktiven für seine Namespaces hinzu, sodass die Datei sie nicht benötigt.
Note
Die using Prime.Services; Direktive befindet sich absichtlich im Namespace. MTP generiert den Einstiegspunkt der Testanwendung im Stammnamespace des Projekts. PrimeService.Tests Dieser Namespace blendet die PrimeService Klasse aus einer using Direktive am Anfang der Datei, aber nicht von einer innerhalb des Namespaces aus.
Speichern Sie diese Datei, und führen Sie den dotnet test Befehl aus, um die Tests und die Klassenbibliothek zu erstellen und die Tests auszuführen. Das TUnit-Testprojekt enthält den Einstiegspunkt des Programms, um Ihre Tests auszuführen.
dotnet test startet die Testanwendung mit dem von Ihnen erstellten Komponententestprojekt.
Ihr Test schlägt fehl. Sie haben die Implementierung noch nicht erstellt. Damit dieser Test erfolgreich verläuft, schreiben Sie einen ganz einfachen, funktionierenden Code in die PrimeService-Klasse:
public bool IsPrime(int candidate)
{
if (candidate == 1)
{
return false;
}
throw new NotImplementedException("Please create a test first.");
}
Führen Sie dotnet test im Verzeichnis unit-testing-using-tunit erneut aus. Der Befehl dotnet test führt einen Build für das PrimeService Projekt und dann für das PrimeService.Tests Projekt aus. Nachdem Sie beide Projekte erstellt haben, wird dieser einzelne Test ausgeführt. Er ist erfolgreich.
Hinzufügen weiterer Funktionen
Nachdem Sie nun einen Testdurchlauf bestanden haben, ist es an der Zeit, mehr zu schreiben. Es gibt einige andere einfache Fälle für Primzahlen: 0, -1. Sie könnten neue Tests mit dem [Test] Attribut hinzufügen, aber das wird schnell mühsam. TUnit stellt das [Arguments] Attribut bereit, um eine Reihe von Tests zu erstellen, die denselben Code ausführen, aber unterschiedliche Eingabeargumente haben.
Anstatt neue Tests zu erstellen, wenden Sie dieses Attribut an, um einen einzelnen datengesteuerten Test zu erstellen. Ersetzen Sie die IsPrime_InputIs1_ReturnFalse-Methode durch den folgenden Code. Der datengesteuerte Test ist eine Methode, die mehrere Werte weniger als zwei testet, was die niedrigste Primzahl ist:
[Test]
[Arguments(-1)]
[Arguments(0)]
[Arguments(1)]
public async Task IsPrime_ValuesLessThan2_ReturnFalse(int value)
{
var result = _primeService.IsPrime(value);
await Assert.That(result).IsFalse();
}
Führen Sie dotnet test aus und zwei dieser Tests schlagen fehl. Um alle Tests erfolgreich zu machen, ändern Sie die if Klausel am Anfang der IsPrime Methode in der datei PrimeService.cs :
if (candidate < 2)
Fahren Sie fort, indem Sie weitere Tests und Code in der Hauptbibliothek hinzufügen.
Sie haben eine kleine Bibliothek und eine Reihe von Komponententests für diese Bibliothek erstellt. Sie haben die Lösung auch so strukturiert, dass das Hinzufügen neuer Pakete und Tests Teil des Standardworkflows ist. Sie haben die meiste Zeit und Mühe auf die Erreichung der Ziele der Anwendung konzentriert.