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
- .NET 8 SDK oder höhere Versionen.
- Ein Text-Editor oder Code-Editor Ihrer Wahl.
Erstellen des Quellprojekts
Öffnen eines Shell-Fensters. Erstellen Sie ein Verzeichnis namens unit-testing-vb-nunit , 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 die Dateistruktur bisher:
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/PrimeService
Stellen Sie PrimeService zum aktuellen Verzeichnis, und führen Sie den folgenden Befehl aus, um das Quellprojekt zu erstellen:
dotnet new classlib -lang VB
Benennen Sie Class1.VB in PrimeService.VBum. Sie erstellen eine fehlerhafte Implementierung der Klasse PrimeService
.
Namespace Prime.Services
Public Class PrimeService
Public Function IsPrime(candidate As Integer) As Boolean
Throw New NotImplementedException("Please create a test first.")
End Function
End Class
End Namespace
Ändern Sie das Verzeichnis wieder in das Verzeichnis unit-testing-vb-using-mstest. Führen Sie den folgenden Befehl aus, um das Klassenbibliotheksprojekt zur Projektmappe hinzuzufügen:
dotnet sln add .\PrimeService\PrimeService.vbproj
Erstellen des Testprojekts
Erstellen Sie als Nächstes das Verzeichnis PrimeService.Tests. Die folgende Gliederung zeigt die Verzeichnisstruktur:
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Erstellen Sie das Verzeichnis "PrimeService.Tests " als aktuelles Verzeichnis, und erstellen Sie ein neues Projekt mit dem folgenden Befehl:
dotnet new nunit -lang VB
Der neue Befehl dotnet erstellt ein Testprojekt, das NUnit als Testbibliothek verwendet. Die generierte Vorlage konfiguriert den Testrunner in der Datei "PrimeServiceTests.vbproj ":
<ItemGroup>
<PackageReference Include="nunit" Version="4.3.2" />
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
</ItemGroup>
Hinweis
Vor .NET 9 kann der generierte Code auf ältere Versionen des NUnit-Testframeworks verweisen. Sie können dotnet CLI verwenden, um die Pakete zu aktualisieren. Öffnen Sie alternativ die Datei PrimeService.Tests.vbproj, und ersetzen Sie den Inhalt der Paketverweise-Elementgruppe durch den obigen Code.
Das Testprojekt erfordert andere Pakete zum Erstellen und Ausführen von Komponententests.
dotnet new
im vorherigen Schritt wurde NUnit und der NUnit-Testadapter hinzugefügt. 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.vbproj
Die ganze Datei finden Sie im Beispielerepository auf GitHub.
Sie haben das folgende endgültige Lösungslayout:
/unit-testing-vb-nunit
unit-testing-vb-nunit.sln
/PrimeService
Source Files
PrimeService.vbproj
/PrimeService.Tests
Test Source Files
PrimeService.Tests.vbproj
Führen Sie den folgenden Befehl im Verzeichnis unit-testing-vb-nunit aus:
dotnet sln add .\PrimeService.Tests\PrimeService.Tests.vbproj
Erstellen des ersten Tests
Du schreibst einen fehlgeschlagenen Test, machst ihn erfolgreich und wiederholst dann den Vorgang. Benennen Sie im Verzeichnis PrimeService.Tests die UnitTest1.vb Datei in PrimeService_IsPrimeShould.VB um, und ersetzen Sie den gesamten Inhalt durch den folgenden Code:
Imports NUnit.Framework
Namespace PrimeService.Tests
<TestFixture>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<Test>
Sub IsPrime_InputIs1_ReturnFalse()
Dim result As Boolean = _primeService.IsPrime(1)
Assert.That(result, [Is].False, $"1 should not be prime")
End Sub
End Class
End Namespace
Das attribut <TestFixture>
gibt eine Klasse an, die Tests enthält. Das attribut <Test>
bezeichnet eine Methode, die vom Testläufer ausgeführt wird. Führen Sie ausgehend vom Unit-testing-vb-nunitdotnet test
aus, um die Tests und die Klassenbibliothek zu erstellen und anschließend die Tests auszuführen. Der NUnit-Testläufer enthält den Programmeinstiegspunkt, um Ihre Tests auszuführen.
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 Function IsPrime(candidate As Integer) As Boolean
If candidate = 1 Then
Return False
End If
Throw New NotImplementedException("Please create a test first.")
End Function
Führen Sie im Verzeichnis unit-testing-vb-nunit 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 Funktionen
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önnen diese Fälle als neue Tests mit dem attribut <Test>
hinzufügen, aber das wird schnell mühsam. Es gibt weitere xUnit-Attribute, mit denen Sie eine Reihe ähnlicher Tests schreiben können. Ein <TestCase>
Attribut stellt eine Reihe von Tests dar, die denselben Code ausführen, aber unterschiedliche Eingabeargumente haben. Sie können das <TestCase>
Attribut verwenden, um Werte für diese Eingaben anzugeben.
Anstatt neue Tests zu erstellen, wenden Sie diese beiden Attribute an, um eine Reihe von Tests zu erstellen, die mehrere Werte weniger als zwei testen, was die niedrigste Primzahl ist:
<TestFixture>
Public Class PrimeService_IsPrimeShould
Private _primeService As Prime.Services.PrimeService = New Prime.Services.PrimeService()
<TestCase(-1)>
<TestCase(0)>
<TestCase(1)>
Sub IsPrime_ValuesLessThan2_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].False, $"{value} should not be prime")
End Sub
<TestCase(2)>
<TestCase(3)>
<TestCase(5)>
<TestCase(7)>
Public Sub IsPrime_PrimesLessThan10_ReturnTrue(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].True, $"{value} should be prime")
End Sub
<TestCase(4)>
<TestCase(6)>
<TestCase(8)>
<TestCase(9)>
Public Sub IsPrime_NonPrimesLessThan10_ReturnFalse(value As Integer)
Dim result As Boolean = _primeService.IsPrime(value)
Assert.That(result, [Is].False, $"{value} should not be prime")
End Sub
End Class
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 Main
Methode in der datei PrimeServices.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.