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. Wenn Sie dem Tutorial lieber mit einer vorgefertigten Projektmappe folgen, zeigen Sie den Beispielcode an, oder laden Sie ihn herunter, bevor Sie beginnen. Anweisungen zum Herunterladen finden Sie unter Beispiele und Lernprogramme.
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.
Voraussetzungen
- Das neueste .NET SDK
- Visual Studio Code-Editor
- Das C# DevKit
Erstellen des Quellprojekts
Öffnen eines Shell-Fensters. Erstellen Sie ein Verzeichnis namens unit-testing-using-mstest , um die Lösung zu speichern. Führen Sie in diesem neuen Verzeichnis den Befehl dotnet new sln
aus, um eine neue Lösungsdatei für die Klassenbibliothek und das Testprojekt zu erstellen. Erstellen Sie ein PrimeService-Verzeichnis . Die folgende Gliederung zeigt bisher die Verzeichnis- und Dateistruktur:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Machen Sie PrimeService zum aktuellen Verzeichnis und führen Sie dotnet new classlib
aus, um das Quellprojekt zu erstellen. Benennen Sie Class1.cs in PrimeService.cs um. Ersetzen Sie den Code in der Datei durch den folgenden Code, um eine fehlerhafte Implementierung der PrimeService
Klasse zu erstellen:
using System;
namespace Prime.Services
{
public class PrimeService
{
public bool IsPrime(int candidate)
{
throw new NotImplementedException("Please create a test first.");
}
}
}
Ändern Sie das Verzeichnis wieder in das Verzeichnis unit-testing-using-mstest. Führen Sie dotnet sln add
aus, um das Klassenbibliotheksprojekt zur Projektmappe hinzuzufügen:
dotnet sln add PrimeService/PrimeService.csproj
Erstellen des Testprojekts
Erstellen Sie das Verzeichnis "PrimeService.Tests ". Die folgende Gliederung zeigt die Verzeichnisstruktur:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Machen Sie das PrimeService.Tests-Verzeichnis zum aktuellen Verzeichnis, und erstellen Sie ein neues Projekt mit dotnet new mstest
. Der neue Befehl dotnet erstellt ein Testprojekt, das MSTest als Testbibliothek verwendet. Die Vorlage konfiguriert den Testläufer in der Datei "PrimeServiceTests.csproj ":
<ItemGroup>
<PackageReference Include="MSTest" Version="3.2.0" />
<PackageReference Include="Microsoft.Testing.Extensions.CodeCoverage" Version="17.10.1" />
</ItemGroup>
Das Testprojekt erfordert andere Pakete zum Erstellen und Ausführen von Komponententests.
dotnet new
hat im vorherigen Schritt die erforderlichen MSTest-Pakete und Tools für die Codeabdeckungsberichte hinzugefügt.
Fügen Sie die PrimeService
Klassenbibliothek als weitere Abhängigkeit zum Projekt hinzu. Verwenden Sie den Befehl dotnet reference add
:
dotnet reference add ../PrimeService/PrimeService.csproj
Die ganze Datei finden Sie im Beispielerepository auf GitHub.
Die folgende Gliederung zeigt das endgültige Lösungslayout:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Test Source Files
PrimeServiceTests.csproj
Wechseln Sie zum Verzeichnis "unit-testing-using-mstest", und führen Sie den Befehl dotnet sln add
aus.
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.csproj
Erstellen des ersten Tests
Schreiben Sie einen fehlgeschlagenen Test, machen Sie ihn erfolgreich, und wiederholen Sie den Vorgang. Entfernen Sie UnitTest1.cs aus dem Verzeichnis "PrimeService.Tests ", und erstellen Sie eine neue C#-Datei namens PrimeService_IsPrimeShould.cs mit dem folgenden Inhalt:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Prime.Services;
namespace Prime.UnitTests.Services
{
[TestClass]
public class PrimeService_IsPrimeShould
{
private readonly PrimeService _primeService;
public PrimeService_IsPrimeShould()
{
_primeService = new PrimeService();
}
[TestMethod]
public void IsPrime_InputIs1_ReturnFalse()
{
bool result = _primeService.IsPrime(1);
Assert.IsFalse(result, "1 should not be prime");
}
}
}
Das TestClass-Attribut gibt eine Klasse an, die Komponententests enthält. Das TestMethod-Attribut gibt an, dass es sich bei einer Methode um eine Testmethode handelt.
Speichern Sie diese Datei, und führen Sie sie aus dotnet test
, um die Tests und die Klassenbibliothek zu erstellen und dann die Tests auszuführen. Der MSTest Test Runner verfügt über den Programmeinstiegspunkt zum Ausführen der Tests.
dotnet test
startet Test Runner mithilfe des von Ihnen erstellten Komponententestprojekts.
Ihr Test schlägt fehl. Sie haben die Implementierung noch nicht erstellt. Bringen Sie diesen Test zum Bestehen, indem Sie den einfachsten funktionierenden Code in der Klasse PrimeService
schreiben.
public bool IsPrime(int candidate)
{
if (candidate == 1)
{
return false;
}
throw new NotImplementedException("Please create a test first.");
}
Führen Sie im Verzeichnis unit-testing-using-mstest erneut dotnet test
aus. Der Befehl dotnet test
führt einen Build für das PrimeService
Projekt und dann für das PrimeService.Tests
Projekt aus. Nachdem beide Projekte erstellt wurden, führt es diesen einzelnen Test aus. Er ist erfolgreich.
Hinzufügen weiterer Features
Nachdem Sie nun einen Test 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 TestMethod-Attribut hinzufügen, aber das wird schnell mühsam. Es gibt weitere MSTest-Attribute, mit denen Sie eine Reihe ähnlicher Tests schreiben können. Eine Testmethode kann denselben Code ausführen, hat jedoch unterschiedliche Eingabeargumente. Sie können das DataRow-Attribut verwenden, um Werte für diese Eingaben anzugeben.
Anstatt neue Tests zu erstellen, wenden Sie diese beiden Attribute an, um einen einzelnen datengesteuerten Test zu erstellen. Bei dem datengesteuerten Test handelt es sich um eine Methode, die mehrere Werte testet, die kleiner als zwei sind, was die niedrigste Primzahl ist. Fügen Sie in PrimeService_IsPrimeShould.cs eine neue Testmethode hinzu:
[TestMethod]
[DataRow(-1)]
[DataRow(0)]
[DataRow(1)]
public void IsPrime_ValuesLessThan2_ReturnFalse(int value)
{
var result = _primeService.IsPrime(value);
Assert.IsFalse(result, $"{value} should not be prime");
}
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, mehr Theorien und mehr Code in der Hauptbibliothek hinzufügen. Sie verfügen über die endgültige Version der Tests und die vollständige Implementierung der Bibliothek.
Sie haben eine kleine Bibliothek und eine Reihe von Unittests für diese Bibliothek erstellt. Sie haben die Lösung so strukturiert, dass das Hinzufügen neuer Pakete und Tests Teil des normalen Workflows ist. Sie haben die meiste Zeit und Mühe auf die Erreichung der Ziele der Anwendung konzentriert.