Een .NET-klassebibliotheek testen met Visual Studio
Belangrijk
Microsoft heeft de buitengebruikstelling van Visual Studio voor Mac aangekondigd. Visual Studio voor Mac wordt vanaf 31 augustus 2024 niet meer ondersteund. Alternatieven zijn:
- Visual Studio Code met de C# Dev Kit en gerelateerde extensies, zoals .NET MAUI en Unity.
- Visual Studio die wordt uitgevoerd op Windows op een VIRTUELE machine op mac.
- Visual Studio die wordt uitgevoerd op Windows op een virtuele machine in de cloud.
Zie Visual Studio voor Mac aankondiging van buitengebruikstelling voor meer informatie.
Deze zelfstudie laat zien hoe u eenheidstests automatiseert door een testproject toe te voegen aan een oplossing.
Vereisten
- Deze zelfstudie werkt met de oplossing die u maakt in Een .NET-klassebibliotheek maken met behulp van Visual Studio voor Mac.
Een eenheidstestproject maken
Eenheidstests bieden geautomatiseerde softwaretests tijdens uw ontwikkeling en publicatie. MSTest is een van de drie testframeworks waaruit u kunt kiezen. De andere zijn xUnit en nUnit.
Start Visual Studio voor Mac.
Open de
ClassLibraryProjects
oplossing die u hebt gemaakt in Een .NET-klassebibliotheek maken met behulp van Visual Studio voor Mac.Klik in het pad Van de oplossing op ctrl-klik op de
ClassLibraryProjects
oplossing en selecteer Nieuw project toevoegen>.Selecteer tests in het dialoogvenster Nieuw project op het web- en consoleknooppunt. Selecteer het MSTest-project gevolgd door Volgende.
Selecteer .NET 5.0 als doelframework en selecteer Volgende.
Geef het nieuwe project de naam StringLibraryTest en selecteer Maken.
Visual Studio maakt een klassebestand met de volgende code:
using Microsoft.VisualStudio.TestTools.UnitTesting; namespace StringLibraryTest { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } } }
De broncode die door de eenheidstestsjabloon is gemaakt, doet het volgende:
- Hiermee importeert u de Microsoft.VisualStudio.TestTools.UnitTesting naamruimte, die de typen bevat die worden gebruikt voor eenheidstests.
- Het kenmerk wordt toegepast TestClassAttribute op de
UnitTest1
klasse. - Het kenmerk wordt toegepast TestMethodAttribute op
TestMethod1
.
Elke methode die is getagd met [TestMethod] in een testklasse die is getagd met [TestClass] wordt automatisch uitgevoerd wanneer de eenheidstest wordt uitgevoerd.
Een projectreferentie toevoegen
Voeg een verwijzing naar het StringLibrary
project toe om het testproject te laten werken met de StringLibrary
klasse.
Klik in het oplossingsblok op Afhankelijkheden onder StringLibraryTest. Selecteer Verwijzing toevoegen in het contextmenu.
Selecteer in het dialoogvenster Verwijzingen het project StringLibrary . Selecteer OK.
Testmethoden voor eenheden toevoegen en uitvoeren
Wanneer Visual Studio een eenheidstest uitvoert, wordt elke methode uitgevoerd die is gemarkeerd met het TestMethodAttribute kenmerk in een klasse die is gemarkeerd met het TestClassAttribute kenmerk. Een testmethode eindigt wanneer de eerste fout wordt gevonden of wanneer alle tests in de methode zijn geslaagd.
De meest voorkomende tests roepen leden van de Assert klasse aan. Veel assertiemethoden bevatten ten minste twee parameters, waarvan een het verwachte testresultaat is en waarvan het werkelijke testresultaat is. Sommige van de meest gebruikte methoden van de Assert
klasse worden weergegeven in de volgende tabel:
Assert-methoden | Function |
---|---|
Assert.AreEqual |
Controleert of twee waarden of objecten gelijk zijn. De assert mislukt als de waarden of objecten niet gelijk zijn. |
Assert.AreSame |
Controleert of twee objectvariabelen naar hetzelfde object verwijzen. De assert mislukt als de variabelen verwijzen naar verschillende objecten. |
Assert.IsFalse |
Controleert of een voorwaarde is false . De assert mislukt als de voorwaarde is true . |
Assert.IsNotNull |
Controleert of een object niet null is. De assert mislukt als het object is null . |
U kunt de Assert.ThrowsException methode ook gebruiken in een testmethode om aan te geven welk type uitzondering wordt verwacht te genereren. De test mislukt als de opgegeven uitzondering niet wordt gegenereerd.
Bij het testen van de StringLibrary.StartsWithUpper
methode wilt u een aantal tekenreeksen opgeven die beginnen met een hoofdletter. U verwacht dat de methode in deze gevallen wordt geretourneerd true
, zodat u de Assert.IsTrue methode kunt aanroepen. Op dezelfde manier wilt u een aantal tekenreeksen opgeven die beginnen met iets anders dan een hoofdletter. U verwacht dat de methode in deze gevallen wordt geretourneerd false
, zodat u de Assert.IsFalse methode kunt aanroepen.
Omdat uw bibliotheekmethode tekenreeksen verwerkt, wilt u er ook voor zorgen dat er een lege tekenreeks (String.Empty
), een geldige tekenreeks met geen tekens en waarvan Length de waarde 0 is, en een null
tekenreeks die niet is geïnitialiseerd. U kunt rechtstreeks aanroepen StartsWithUpper
als een statische methode en één String argument doorgeven. U kunt ook aanroepen StartsWithUpper
als een extensiemethode voor een string
variabele die is toegewezen aan null
.
U definieert drie methoden, die elk een Assert methode aanroepen voor elk element in een tekenreeksmatrix. U roept een overbelasting van de methode aan waarmee u een foutbericht kunt opgeven dat moet worden weergegeven in het geval van een testfout. Het bericht identificeert de tekenreeks die de fout heeft veroorzaakt.
De testmethoden maken:
Open het bestand UnitTest1.cs en vervang de code door de volgende code:
using Microsoft.VisualStudio.TestTools.UnitTesting; using UtilityLibraries; namespace StringLibraryTest { [TestClass] public class UnitTest1 { [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, string.Format("Expected for '{0}': true; Actual: {1}", word, 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, string.Format("Expected for '{0}': false; Actual: {1}", word, 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, string.Format("Expected for '{0}': false; Actual: {1}", word == null ? "<null>" : word, result)); } } } }
De test van hoofdletters in de
TestStartsWithUpper
methode bevat de Griekse hoofdletter alfa (U+0391) en de Cyrillische hoofdletter EM (U+041C). De test van kleine letters in deTestDoesNotStartWithUpper
methode bevat de Griekse kleine letter alfa (U+03B1) en de Cyrillische kleine letter Ghe (U+0433).Selecteer Bestand>opslaan als op de menubalk. Zorg ervoor dat codering is ingesteld op Unicode (UTF-8) in het dialoogvenster.
Wanneer u wordt gevraagd of u het bestaande bestand wilt vervangen, selecteert u Vervangen.
Als u uw broncode niet opslaat als een UTF8-gecodeerd bestand, kan Visual Studio deze opslaan als een ASCII-bestand. Als dat gebeurt, worden de UTF8-tekens buiten het ASCII-bereik niet nauwkeurig gedecodeerd door de runtime en zijn de testresultaten niet juist.
Open het deelvenster Eenheidstests aan de rechterkant van het scherm. Selecteer Tests weergeven>in het menu.
Klik op het Dock-pictogram om het deelvenster open te houden.
Klik op de knop Alles uitvoeren .
Alle tests slagen.
Testfouten afhandelen
Als u testgestuurde ontwikkeling (TDD) uitvoert, schrijft u eerst tests en mislukken ze de eerste keer dat u ze uitvoert. Vervolgens voegt u code toe aan de app waarmee de test slaagt. Voor deze zelfstudie hebt u de test gemaakt nadat u de app-code hebt geschreven die wordt gevalideerd, zodat u de test niet hebt gezien. Als u wilt controleren of een test mislukt wanneer u verwacht dat deze mislukt, voegt u een ongeldige waarde toe aan de testinvoer.
Wijzig de
words
matrix in deTestDoesNotStartWithUpper
methode om de tekenreeks 'Fout' op te nemen. U hoeft het bestand niet op te slaan omdat in Visual Studio automatisch geopende bestanden worden opgeslagen wanneer een oplossing is gebouwd om tests uit te voeren.string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };
Voer de tests opnieuw uit.
Deze keer geeft het venster Test Explorer aan dat twee tests zijn geslaagd en één test is mislukt.
Ctrl-klik op de mislukte test
TestDoesNotStartWithUpper
en selecteer Resultatenblok weergeven in het contextmenu.Het resultatenblok geeft het bericht weer dat is geproduceerd door de assert: 'Assert.IsFalse is mislukt. Verwacht voor 'Fout': onwaar; werkelijk: Waar". Vanwege de fout zijn er geen tekenreeksen in de matrix getest nadat 'Fout' is getest.
Verwijder de tekenreeks 'Fout' die u in stap 1 hebt toegevoegd. Voer de test opnieuw uit en de tests zijn geslaagd.
De releaseversie van de bibliotheek testen
Nu alle tests zijn geslaagd bij het uitvoeren van de build voor foutopsporing van de bibliotheek, voert u de tests een extra tijd uit voor de release-build van de bibliotheek. Een aantal factoren, waaronder compileroptimalisaties, kan soms verschillend gedrag produceren tussen foutopsporing en release-builds.
Ga als volgende te werk om de release-build te testen:
Wijzig in de werkbalk van Visual Studio de buildconfiguratie van Foutopsporing in Release.
Klik in het pad Van de oplossing op het project StringLibrary en selecteer Build in het contextmenu om de bibliotheek opnieuw te compileren.
Voer de eenheidstests opnieuw uit.
De tests slagen.
Foutopsporingstests
Als u Visual Studio voor Mac als uw IDE gebruikt, kunt u hetzelfde proces gebruiken dat wordt weergegeven in zelfstudie: Fouten opsporen in een .NET-consoletoepassing met behulp van Visual Studio voor Mac om fouten in code op te sporen met behulp van uw eenheidstestproject. In plaats van het project ShowCase-app te starten, klikt u op het project StringLibraryTests en selecteert u Project starten in het contextmenu.
Visual Studio start het testproject met het bijgevoegde foutopsporingsprogramma. De uitvoering stopt op elk onderbrekingspunt dat u hebt toegevoegd aan het testproject of de onderliggende bibliotheekcode.
Aanvullende bronnen
Volgende stappen
In deze zelfstudie hebt u een klassebibliotheek getest. U kunt de bibliotheek beschikbaar maken voor anderen door deze als pakket te publiceren naar NuGet . Volg een NuGet-zelfstudie voor meer informatie:
Als u een bibliotheek publiceert als een NuGet-pakket, kunnen anderen deze installeren en gebruiken. Volg een NuGet-zelfstudie voor meer informatie:
Een bibliotheek hoeft niet als pakket te worden gedistribueerd. Het kan worden gebundeld met een console-app die deze gebruikt. Zie de eerdere zelfstudie in deze reeks voor meer informatie over het publiceren van een console-app:
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor