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.
In diesem Tutorial wird gezeigt, wie Sie Komponententests automatisieren, indem Sie einer Projektmappe ein Testprojekt hinzufügen.
Voraussetzungen
Dieses Lernprogramm funktioniert mit der Lösung, die Sie in Create a .NET class library erstellen.
Erstellen eines Komponententestprojekts
Komponententests bieten automatisierte Softwaretests während der Entwicklung und Veröffentlichung. MSTest ist eines von drei Testframeworks, aus denen Sie wählen können. Die beiden anderen sind xUnit und nUnit.
Starten Sie Visual Studio.
Öffnen Sie die
ClassLibraryProjectsLösung, die Sie in Erstellen einer .NET-Klassenbibliothek erstellt haben.Fügen Sie der Lösung ein neues Unittestprojekt namens "StringLibraryTest" hinzu.
Klicken Sie mit der rechten Maustaste auf die Lösung in Projektmappen-Explorer und wählen Sie Add>Neues Projekt aus.
Geben Sie auf der Seite Neues Projekt hinzufügenmstest in das Suchfeld ein. Wählen Sie C# oder Visual Basic aus der Liste "Sprache" und dann in der Liste "Plattform" All platforms aus.
Wählen Sie die Vorlage MSTest-Testprojekt aus, und klicken Sie dann auf Weiter.
Geben Sie im auf der Seite Neues Projekt konfigurieren im Feld Projektname den Namen StringLibraryTest ein. Klicken Sie dann auf Weiter.
Wählen Sie auf der Seite Weitere Informationen.NET 10 im Feld Framework aus, wählen Sie Microsoft.Testing.Platform für den Test runner und dann Create aus.
Geben Sie zusätzliche Informationen für das MSTest-Testprojekt ein.
Visual Studio erstellt das Projekt und öffnet die Klassendatei im Codefenster mit dem folgenden Code. Wenn die sprache, die Sie verwenden möchten, nicht angezeigt wird, ändern Sie die Sprachauswahl oben auf der Seite.
namespace StringLibraryTest { [TestClass] public sealed class Test1 { [TestMethod] public void TestMethod1() { } } }Imports Microsoft.VisualStudio.TestTools.UnitTesting Namespace StringLibraryTest <TestClass> Public Class Test1 <TestMethod> Sub TestSub() End Sub End Class End NamespaceDer von der Vorlage für Komponententests erstellte Quellcode führt Folgendes aus:
- Enthält Microsoft.VisualStudio.TestTools.UnitTesting in der StringLibraryTest-Projektdatei in C# und importiert Microsoft.VisualStudio.TestTools.UnitTesting in Visual Basic.
- Wendet das Attribut auf die Klasse an.
- Wendet das attribut TestMethodAttribute an, um
TestMethod1in C# oderTestSubin Visual Basic zu definieren.
Jede methode, die mit [TestMethod] in einer mit [TestClass] markierten Testklasse markiert ist, wird automatisch ausgeführt, wenn der Komponententest ausgeführt wird.
Starten Sie Visual Studio Code.
Öffnen Sie die
ClassLibraryProjectsLösung, die Sie in ‘.NET-Klassenbibliothek erstellen’ erstellt haben.Wählen Sie in Projektmappen-ExplorerNeues Projekt oder in der Befehlspalette .NET: Neues Projekt aus.
Wählen Sie MSTest Test Project aus, nennen Sie es "StringLibraryTest", wählen Sie das Standardverzeichnis aus, und wählen Sie "Projekt erstellen" aus.
Die Projektvorlage erstellt StringLibraryTest/Test1.cs mit dem folgenden Code:
namespace StringLibraryTest; [TestClass] public class Test1 { [TestMethod] public void TestMethod1() { } }Der von der Vorlage für Komponententests erstellte Quellcode führt Folgendes aus:
- Es wendet das Attribut auf die Klasse an.
- Es wendet das Attribut an, um etwas zu definieren.
- Er importiert den Namespace, der die typen enthält, die für Komponententests verwendet werden. Der Namespace wird über eine Direktive in GlobalUsings.cs importiert.
Jede methode, die mit [TestMethod] in einer mit [TestClass] markierten Testklasse markiert ist, wird automatisch ausgeführt, wenn der Komponententest aufgerufen wird.
Öffnen Sie das Terminal, und navigieren Sie zum Lernprogrammordner, der die Projekte StringLibrary und ShowCase enthält.
Erstellen Eines neuen MSTest-Testprojekts:
dotnet new mstest -n StringLibraryTestDie Projektvorlage erstellt StringLibraryTest/Test1.cs mit dem folgenden Code:
namespace StringLibraryTest; [TestClass] public class Test1 { [TestMethod] public void TestMethod1() { } }Der von der Vorlage für Komponententests erstellte Quellcode führt Folgendes aus:
- Es wendet das Attribut auf die Klasse an.
- Es wendet das Attribut an, um [Element/Entity] zu definieren.
- Er importiert den Namespace, der die typen enthält, die für Komponententests verwendet werden.
Jede methode, die mit [TestMethod] in einer mit [TestClass] markierten Testklasse markiert ist, wird automatisch ausgeführt, wenn der Komponententest aufgerufen wird.
Hinzufügen eines Projektverweises
Damit das Testprojekt mit der Klasse funktioniert, fügen Sie einen Verweis auf das Projekt zum Testprojekt hinzu.
Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das Dependencies Knoten des StringLibraryTest Projekts, und wählen Sie Add Project Reference aus dem Kontextmenü aus.
Wählen Sie im Dialogfeld "Verweis-Manager " das Kontrollkästchen neben StringLibrary aus.
Fügen Sie StringLibrary als Projektverweis für StringLibraryTest hinzu.
Wählen Sie OK aus.
Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf das Projekt "StringLibraryTest", und wählen Sie Add Project Reference aus.
Wählen Sie "StringLibrary" aus.
Navigieren Sie zum Ordner "StringLibraryTest", und fügen Sie den Projektverweis hinzu:
cd StringLibraryTest dotnet add reference ../StringLibrary/StringLibrary.csproj
Hinzufügen und Ausführen von Komponententestmethoden
Wenn ein Komponententest ausgeführt wird, wird jede Methode, die mit dem Attribut in einer Klasse gekennzeichnet ist, die mit dem Attribut gekennzeichnet ist, automatisch ausgeführt. Eine Testmethode endet, wenn der erste Fehler gefunden wird oder wenn alle in der Methode enthaltenen Tests erfolgreich sind.
In den am häufigsten verwendeten Tests werden Member der Klasse aufgerufen. Viele Assert-Methoden enthalten mindestens zwei Parameter, von denen einer das erwartete und der andere das tatsächliche Testergebnis ist. Die am häufigsten aufgerufenen Methoden der -Klasse werden in der nachfolgenden Tabelle aufgeführt:
| Assert-Methoden | Funktion |
|---|---|
Assert.AreEqual |
Überprüft, ob zwei Werte oder Objekte gleich sind. Der Assert ist nicht erfolgreich, wenn die Werte oder Objekte nicht gleich sind. |
Assert.AreSame |
Überprüft, ob zwei Objektvariablen auf das gleiche Objekt verweisen. Die Bestätigung ist nicht erfolgreich, wenn die Variablen auf verschiedene Objekte verweisen. |
Assert.IsFalse |
Überprüft, ob eine Bedingung ist. Die Bestätigung ist nicht erfolgreich, wenn die Bedingung ist. |
Assert.IsNotNull |
Überprüft, ob ein Objekt nicht ist. Die Bestätigung ist nicht erfolgreich, wenn das Objekt ist. |
Sie können die Methode auch in einer Testmethode verwenden, um den Typ der Ausnahme anzugeben, die erwartet wird auszulösen. Der Test ist nicht erfolgreich, wenn die angegebene Ausnahme nicht ausgelöst wird.
Beim Testen der Methode möchten Sie eine Reihe von Zeichenfolgen angeben, die mit einem Großbuchstaben beginnen. Sie erwarten, dass die Methode in diesen Fällen zurückgibt, also können Sie die Methode aufrufen. Ebenso möchten Sie eine Reihe von Zeichenfolgen angeben, die mit einem anderen Zeichen als einem Großbuchstaben beginnen. Sie erwarten, dass die Methode in diesen Fällen zurückgibt, also können Sie die Methode aufrufen.
Da ihre Bibliotheksmethode Zeichenfolgen behandelt, möchten Sie auch sicherstellen, dass sie erfolgreich eine leere Zeichenfolge () und eine Zeichenfolge verarbeitet. Eine leere Zeichenfolge ist eine Zeichenfolge, die keine Zeichen enthält und deren 0 ist. Eine Zeichenfolge ist eine Zeichenfolge, die nicht initialisiert wurde. Sie können direkt als statische Methode aufrufen und ein einzelnes Argument übergeben. Sie können auch eine Erweiterungsmethode für eine Variable aufrufen, die einer anderen Variablen zugewiesen ist.
Sie definieren drei Methoden, von denen jede eine Methode für jedes Element in einem Zeichenfolgenarray aufruft. Sie rufen eine Methodenüberladung auf, mit der Sie eine Fehlermeldung angeben können, die bei Testfehlern angezeigt werden soll. Die Meldung enthält die Zeichenfolge, die den Fehler verursacht hat.
So erstellen Sie die Testmethoden:
Ersetzen Sie im Codefenster Test1.cs oder Test1.vb den Code durch den folgenden Code:
using UtilityLibraries; namespace StringLibraryTest { [TestClass] public sealed class Test1 { [TestMethod] public void TestStartsWithUpper() { // Tests that we expect to return true. string[] words = ["Alphabet", "Zebra", "ABC", "Αθήνα", "Москва"]; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsTrue(result, $"Expected for '{word}': true; Actual: {result}"); } } [TestMethod] public void TestDoesNotStartWithUpper() { // Tests that we expect to return false. string[] words = ["alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " "]; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsFalse(result, $"Expected for '{word}': false; Actual: {result}"); } } [TestMethod] public void DirectCallWithNullOrEmpty() { // Tests that we expect to return false. string?[] words = [string.Empty, null]; foreach (var word in words) { bool result = StringLibrary.StartsWithUpper(word); Assert.IsFalse(result, $"Expected for '{word ?? "<null>"}': false; Actual: {result}"); } } } }Imports Microsoft.VisualStudio.TestTools.UnitTesting Imports UtilityLibraries Namespace StringLibraryTest <TestClass> Public Class UnitTest1 <TestMethod> Public Sub TestStartsWithUpper() ' Tests that we expect to return true. Dim words() As String = {"Alphabet", "Zebra", "ABC", "Αθήνα", "Москва"} For Each word In words Dim result As Boolean = word.StartsWithUpper() Assert.IsTrue(result, $"Expected for '{word}': true; Actual: {result}") Next End Sub <TestMethod> Public Sub TestDoesNotStartWithUpper() ' Tests that we expect to return false. Dim words() As String = {"alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " "} For Each word In words Dim result As Boolean = word.StartsWithUpper() Assert.IsFalse(result, $"Expected for '{word}': false; Actual: {result}") Next End Sub <TestMethod> Public Sub DirectCallWithNullOrEmpty() ' Tests that we expect to return false. Dim words() As String = {String.Empty, Nothing} For Each word In words Dim result As Boolean = StringLibrary.StartsWithUpper(word) Assert.IsFalse(result, $"Expected for '{If(word Is Nothing, "<null>", word)}': false; Actual: {result}") Next End Sub End Class End NamespaceDer Test für Großbuchstaben in der -Methode enthält den griechischen Großbuchstaben Alpha (U+0391) und den kyrillischen Großbuchstaben EM (U+041C). Der Test für Kleinbuchstaben in der -Methode enthält den griechischen Kleinbuchstaben alpha (U+03B1) und den kyrillischen Kleinbuchstaben ghe (U+0433).
Wählen Sie in der Menüleiste DateiTest1.cs speichern unter oder DateiTest1.vb speichern unter aus. Wählen Sie im Dialogfeld Datei speichern unter den Pfeil neben der Schaltfläche Speichern, und wählen Sie dann Mit Codierung speichern... aus.
Wählen Sie im Dialogfeld Speichern unter bestätigen die Schaltfläche Ja, um die Datei zu speichern.
Wählen Sie im Dialogfeld Erweiterte SpeicheroptionenUnicode (UTF-8 mit Signatur) – Codepage 65001 aus der Dropdownliste Codierung aus, und klicken Sie auf OK.
Wenn Sie den Quellcode nicht als UTF8-codierte Datei speichern, Visual Studio sie möglicherweise als ASCII-Datei speichern. In diesem Fall decodiert die Laufzeit nicht genau die UTF8-Zeichen außerhalb des ASCII-Bereichs, und die Testergebnisse sind nicht korrekt.
Wählen Sie auf der Menüleiste TestenAlle Tests ausführen aus. Wenn das Fenster Test-Explorer nicht geöffnet wird, öffnen Sie es, indem Sie TestTest-Explorerauswählen. Die drei Tests sind im Abschnitt Bestandene Tests aufgelistet, und im Abschnitt Zusammenfassung wird das Ergebnis des Testlaufs berichtet.
Test Explorer-Fenster mit erfolgreichen Tests
Öffnen Sie StringLibraryTest/Test1.cs , und ersetzen Sie den gesamten Code durch den folgenden Code.
using UtilityLibraries; namespace StringLibraryTest { [TestClass] public sealed class Test1 { [TestMethod] public void TestStartsWithUpper() { // Tests that we expect to return true. string[] words = ["Alphabet", "Zebra", "ABC", "Αθήνα", "Москва"]; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsTrue(result, $"Expected for '{word}': true; Actual: {result}"); } } [TestMethod] public void TestDoesNotStartWithUpper() { // Tests that we expect to return false. string[] words = ["alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " "]; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsFalse(result, $"Expected for '{word}': false; Actual: {result}"); } } [TestMethod] public void DirectCallWithNullOrEmpty() { // Tests that we expect to return false. string?[] words = [string.Empty, null]; foreach (var word in words) { bool result = StringLibrary.StartsWithUpper(word); Assert.IsFalse(result, $"Expected for '{word ?? "<null>"}': false; Actual: {result}"); } } } }Der Test für Großbuchstaben in der -Methode enthält den griechischen Großbuchstaben Alpha (U+0391) und den kyrillischen Großbuchstaben EM (U+041C). Der Test für Kleinbuchstaben in der -Methode enthält den griechischen Kleinbuchstaben alpha (U+03B1) und den kyrillischen Kleinbuchstaben ghe (U+0433).
Speichern Sie Ihre Änderungen.
Erstellen und Ausführen von Tests
Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf die Lösung, und wählen Sie Build oder aus der Befehlspalette aus, und wählen Sie .NET: Build aus.
Wählen Sie das Fenster "Testen" aus, wählen Sie "Tests starten" oder in der Befehlspalette "Test" aus, und wählen Sie "Test: Alle Tests ausführen".
Öffnen Sie StringLibraryTest/Test1.cs , und ersetzen Sie den gesamten Code durch den folgenden Code:
using UtilityLibraries; namespace StringLibraryTest { [TestClass] public sealed class Test1 { [TestMethod] public void TestStartsWithUpper() { // Tests that we expect to return true. string[] words = ["Alphabet", "Zebra", "ABC", "Αθήνα", "Москва"]; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsTrue(result, $"Expected for '{word}': true; Actual: {result}"); } } [TestMethod] public void TestDoesNotStartWithUpper() { // Tests that we expect to return false. string[] words = ["alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " "]; foreach (var word in words) { bool result = word.StartsWithUpper(); Assert.IsFalse(result, $"Expected for '{word}': false; Actual: {result}"); } } [TestMethod] public void DirectCallWithNullOrEmpty() { // Tests that we expect to return false. string?[] words = [string.Empty, null]; foreach (var word in words) { bool result = StringLibrary.StartsWithUpper(word); Assert.IsFalse(result, $"Expected for '{word ?? "<null>"}': false; Actual: {result}"); } } } }Der Test für Großbuchstaben in der -Methode enthält den griechischen Großbuchstaben Alpha (U+0391) und den kyrillischen Großbuchstaben EM (U+041C). Der Test für Kleinbuchstaben in der -Methode enthält den griechischen Kleinbuchstaben alpha (U+03B1) und den kyrillischen Kleinbuchstaben ghe (U+0433).
Speichern Sie Ihre Änderungen, und führen Sie die Tests aus:
dotnet testDie Tests sollten bestehen.
Umgang mit Testfehlern
Bei der testgesteuerten Entwicklung (Test-Driven Development, TDD) schreiben Sie zunächst Tests, bei deren ersten Ausführung Fehler auftreten. Anschließend fügen Sie der App Code hinzu, mit dem der Test erfolgreich ausgeführt wird. Für dieses Tutorial haben Sie den Test, der den Code überprüft, nach Schreiben des App-Codes erstellt, sodass beim Test kein Fehler aufgetreten ist. Um zu überprüfen, ob ein Test fehlschlägt, wenn Sie erwarten, dass er fehlschlägt, fügen Sie der Testeingabe einen ungültigen Wert hinzu.
Verändern Sie das -Array in der -Methode, um die Zeichenfolge "Error" einzufügen.
string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };Dim words() As String = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " }
Führen Sie den Test aus, indem Sie auf der Menüleiste TestenAlle Tests ausführen auswählen. Das Fenster Test-Explorer zeigt an, dass zwei Tests erfolgreich waren und ein Test fehlgeschlagen ist.
Test-Explorer-Fenster mit fehlgeschlagenen Tests
Wählen Sie den fehlgeschlagenen Test () aus.
Im Fenster Test-Explorer wird die Assert-Meldung angezeigt: „Fehler bei Assert.IsFalse. Erwartet für 'Fehler': false; tatsächlich: True. Aufgrund des Fehlens wurden die Zeichenfolgen im Array nach 'Fehler' nicht überprüft.
Test-Explorer-Fenster, das den Fehler bei der IsFalse-Assertion zeigt
Führen Sie die Tests aus, indem Sie auf den grünen Fehler neben dem Test im Editor klicken.
Die Ausgabe zeigt, dass der Test fehlschlägt und eine Fehlermeldung für den fehlgeschlagenen Test bereitstellt: "Assert.IsFalse failed. Für 'Error' erwartet: false; tatsächlich: True". Aufgrund des Fehlers wurden keine Strings im Array nach "Error" getestet.
Führen Sie die Tests aus:
dotnet testDie Ausgabe zeigt, dass der Test fehlschlägt und eine Fehlermeldung für den fehlgeschlagenen Test bereitstellt: "Assert.IsFalse failed. Für 'Error' erwartet: false; actual: True". Aufgrund des Fehlers wurden keine Zeichenfolgen im Array mehr nach "Error" getestet.
Entfernen Sie die hinzugefügte Zeichenfolge "Error".
Führen Sie den Test erneut aus. Nun ist er erfolgreich.
Testen der Releaseversion der Bibliothek
Nachdem die Tests nun beim Ausführen des Debugbuilds der Bibliothek bestanden haben, führen Sie die Tests für den Releasebuild der Bibliothek ein weiteres Mal aus. Eine Reihe von Faktoren, einschließlich Compileroptimierungen, kann manchmal ein anderes Verhalten zwischen Debug- und Releasebuilds erzeugen.
So testen Sie die endgültige Produktversion:
Ändern Sie in der Symbolleiste Visual Studio die Buildkonfiguration von Debug in Release.
Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf die StringLibrary Projekt, und wählen Sie Build aus dem Kontextmenü aus, um die Bibliothek neu zu kompilieren.
Führen Sie den Komponententest aus, indem Sie auf der Menüleiste TestAlle Tests ausführen auswählen. Die Tests sind erfolgreich.
Führen Sie die Tests mit der Releasebuildkonfiguration aus:
dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
Die Tests sind erfolgreich.
Führen Sie die Tests mit der Releasebuildkonfiguration aus:
dotnet test --configuration Release
Die Tests sind erfolgreich.
Debuggen von Tests
Wenn Sie Visual Studio als IDE verwenden, können Sie denselben Prozess verwenden, der in Tutorial gezeigt wird: Debuggen einer .NET Konsolenanwendung zum Debuggen von Code mithilfe ihres Komponententestprojekts. Anstatt das App-Projekt ShowCase zu starten, klicken Sie erst mit der rechten Maustaste auf das Projekt StringLibraryTests und anschließend mit der linken im Kontextmenü auf Tests debuggen.
Visual Studio startet das Testprojekt mit dem angefügten Debugger. Die Ausführung wird an jedem Haltepunkt beendet, den Sie dem Testprojekt oder dem zugrunde liegenden Bibliothekscode hinzugefügt haben.
Wenn Sie Visual Studio Code als IDE verwenden, können Sie denselben Prozess verwenden, der in Debug eine .NET Konsolenanwendung zum Debuggen von Code mithilfe des Komponententestprojekts verwendet wird. Öffnen Sie "StringLibraryTest/Test1.cs", statt das ShowCase-App-Projekt zu starten, und wählen Sie "Debugtests" in der aktuellen Datei zwischen den Zeilen 7 und 8 aus. Wenn Sie es nicht finden können, drücken Sie Strg+Umschalt+P, um die Befehlspalette zu öffnen und Fenster neu laden einzugeben.
Visual Studio Code startet das Testprojekt mit dem angefügten Debugger. Die Ausführung wird an jedem Haltepunkt beendet, den Sie dem Testprojekt oder dem zugrunde liegenden Bibliothekscode hinzugefügt haben.
Weitere Ressourcen
Bereinigen von Ressourcen
GitHub löscht Ihren Code-Space automatisch nach 30 Tagen Inaktivität. Wenn Sie weitere Anleitungen in dieser Reihe erkunden möchten, können Sie Ihren Codespace einsatzbereit lassen. Wenn Sie bereit sind, die website .NET zum Herunterladen des .NET SDK zu besuchen, können Sie Ihren Codespace löschen. Um Ihren Codespace zu löschen, öffnen Sie ein Browserfenster, und navigieren Sie zu Ihren Codespaces. Im Fenster wird eine Liste Ihrer Codespaces angezeigt. Wählen Sie die drei Punkte () im Eintrag für den Lern-Tutorial-Codespace aus. Wählen Sie dann "Löschen" aus.
Nächste Schritte
In diesem Tutorial haben Sie Komponententests für eine Klassenbibliothek ausgeführt. Sie können die Bibliothek anderen Benutzern zur Verfügung stellen, indem Sie sie als Paket in NuGet veröffentlichen. Weitere Informationen dazu finden Sie in einem NuGet-Tutorial:
Erstellen und Veröffentlichen eines Pakets mithilfe der dotnet CLI
Wenn Sie eine Bibliothek als NuGet-Paket veröffentlichen, können andere Benutzer diese installieren und verwenden. Weitere Informationen dazu finden Sie in einem NuGet-Tutorial:
Installieren und Verwenden eines Pakets mithilfe der dotnet CLI
Eine Bibliothek muss nicht als Paket verteilt werden. Es kann mit einer Konsolen-App gebündelt werden, die es verwendet. Informationen zum Veröffentlichen einer Konsolen-App finden Sie in einem früheren Tutorial dieser Reihe: