Handledning: Testa ett .NET-klassbibliotek med hjälp av Visual Studio Code
Den här självstudien visar hur du automatiserar enhetstestning genom att lägga till ett testprojekt i en lösning.
Förutsättningar
- Den här handledningen fungerar med den lösning som du skapar i Skapa ett .NET-klassbibliotek med Visual Studio Code.
Skapa ett enhetstestprojekt
Enhetstester ger automatiserad programvarutestning under din utveckling och publicering. Det testramverk som du använder i den här självstudien är MSTest. MSTest är ett av tre testramverk du kan välja mellan. De andra är xUnit och nUnit.
Starta Visual Studio Code.
Öppna den
ClassLibraryProjects
lösning som du skapade i Skapa ett .NET-klassbibliotek med Visual Studio Code-.I Solution Explorerväljer du Nytt projekteller väljer .NET: New Projectpå kommandopaletten.
Välj MSTest Test Project, ge den namnet "StringLibraryTest", välj standardkatalogen och välj Skapa projekt.
Projektmallen skapar en UnitTest1.cs fil med följande kod:
namespace StringLibraryTest; [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } }
Källkoden som skapas av enhetstestmallen gör följande:
- Det tillämpar attributet TestClassAttribute på klassen
UnitTest1
. - Det använder attributet TestMethodAttribute för att definiera
TestMethod1
. - Den importerar Microsoft.VisualStudio.TestTools.UnitTesting namnrymd, som innehåller de typer som används för enhetstestning. Namnområdet importeras via ett
global using
-direktiv i GlobalUsings.cs.
Varje metod som taggats med [TestMethod] i en testklass taggad med [TestClass] körs automatiskt när enhetstestet anropas.
- Det tillämpar attributet TestClassAttribute på klassen
Lägga till en projektreferens
För att testprojektet ska fungera med klassen StringLibrary
lägger du till en referens i StringLibraryTest
-projektet i StringLibrary
-projektet.
Från Solution Explorer högerklicka på projektet StringLibraryTest och välj Lägg till projektreferens.
Välj "StringLibrary".
Lägga till och köra enhetstestmetoder
När Visual Studio anropar ett enhetstest körs varje metod som är markerad med attributet TestMethodAttribute i en klass som är markerad med attributet TestClassAttribute. En testmetod slutar när det första felet hittas eller när alla tester i metoden har lyckats.
De vanligaste testerna anropar medlemmar i Assert-klassen. Många kontrollmetoder innehåller minst två parametrar, varav en är det förväntade testresultatet och det andra är det faktiska testresultatet. Några av Assert
-klassens vanligaste metoder visas i följande tabell:
Assert-metoder | Funktion |
---|---|
Assert.AreEqual |
Verifierar att två värden eller objekt är lika med. Assertionen misslyckas om värdena eller objekten inte är lika. |
Assert.AreSame |
Verifierar att två objektvariabler refererar till samma objekt. En assertion misslyckas om variablerna refererar till olika objekt. |
Assert.IsFalse |
Verifierar att ett villkor är false . Påståendet misslyckas om villkoret är true . |
Assert.IsNotNull |
Verifierar att ett objekt inte är null . Ett påstående misslyckas om objektet är null . |
Du kan också använda metoden Assert.ThrowsException (eller Assert.Throws
och Assert.ThrowsExactly
om du använder MSTest 3.8 och senare) i en testmetod för att ange vilken typ av undantag det förväntas generera. Testet misslyckas om det angivna undantaget inte utlöses.
När du testar metoden StringLibrary.StartsWithUpper
vill du ange ett antal strängar som börjar med ett versalt tecken. Du förväntar dig att metoden returnerar true
i dessa fall, så att du kan anropa metoden Assert.IsTrue. På samma sätt vill du ange ett antal strängar som börjar med något annat än ett versalt tecken. Du förväntar dig att metoden returnerar false
i dessa fall, så att du kan anropa metoden Assert.IsFalse.
Eftersom biblioteksmetoden hanterar strängar vill du också se till att den hanterar en tom sträng (String.Empty
) och en null
sträng. En tom sträng är en sträng som inte har några tecken och vars Length är 0. En null
sträng är en sträng som inte har initierats. Du kan anropa StartsWithUpper
direkt som en statisk metod och skicka ett enda String argument. Eller så kan du anropa StartsWithUpper
som en tilläggsmetod på en string
variabel som tilldelats null
.
Du definierar tre metoder som var och en anropar en Assert-metod för varje element i en strängmatris. Du anropar en metodöverlagring som gör att du kan ange ett felmeddelande som ska visas vid testfel. Meddelandet identifierar strängen som orsakade felet.
Så här skapar du testmetoderna:
Öppna StringLibraryTest/UnitTest1.cs och ersätt all kod med följande kod.
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)); } } } }
Testet av versaler i metoden
TestStartsWithUpper
innehåller den grekiska versaler alfa (U+0391) och kyrilliska versaler EM (U +041C). Testet av gemener iTestDoesNotStartWithUpper
-metoden innehåller den grekiska gemenbokstaven alfa (U+03B1) och den kyrilliska gemenbokstaven Ghe (U+0433).Spara ändringarna.
Skapa och köra dina tester
I Solution Explorerhögerklickar du på lösningen och väljer Bygg eller välj .NET: Buildfrån kommandopaletten.
Välj fönstret Testning, välj Kör tester eller välj från kommandopaletten Test: Kör alla tester.
Hantera testfel
Om du utför testdriven utveckling (TDD) skriver du tester först och de misslyckas första gången du kör dem. Sedan lägger du till kod i appen som gör att testet lyckas. I den här självstudien har du skapat testet när du har skrivit appkoden som den validerar, så du har inte sett testet misslyckas. Om du vill verifiera att ett test misslyckas när du förväntar dig att det ska misslyckas lägger du till ett ogiltigt värde i testindata.
Ändra
words
-matrisen i metodenTestDoesNotStartWithUpper
så att strängen "Error" inkluderas.string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };
Kör testerna genom att klicka på det gröna felet bredvid testet i redigeraren.
Utdata visar att testet misslyckas och det innehåller ett felmeddelande för det misslyckade testet: "Assert.IsFalse failed. Förväntas för "Error": false; actual: True". På grund av felet testades inga strängar i matrisen efter "Fel".
Ta bort strängen "Fel" som du lade till i steget.
Kör testet igen och testerna godkänns.
Testa släppversionen av biblioteket
Nu när testerna har godkänts när du kör Debug-versionen av biblioteket, kör testerna ytterligare en gång mot Release-versionen av biblioteket. Ett antal faktorer, inklusive kompilatoroptimeringar, kan ibland ge olika beteende mellan felsöknings- och versionsversioner.
Kör testerna med releasekonfigurationen:
dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
Testerna godkänns.
Felsöka tester
Om du använder Visual Studio Code som din IDE kan du använda samma process som visas i Felsöka ett .NET-konsolprogram med Visual Studio Code för att felsöka kod med hjälp av enhetstestprojektet. I stället för att starta appprojektet ShowCase öppnar du StringLibraryTest/UnitTest1.csoch väljer Felsöka tester i den aktuella filen mellan raderna 7 och 8. Om du inte hittar den trycker du på Ctrl+Skift+P för att öppna kommandopaletten och ange Läs in fönstret igen.
Visual Studio Code startar testprojektet med felsökningsprogrammet kopplat. Körningen stoppas vid alla brytpunkter som du har lagt till i testprojektet eller den underliggande bibliotekskoden.
Ytterligare resurser
Nästa steg
I den här handledningen enhetstestade du ett klassbibliotek. Du kan göra biblioteket tillgängligt för andra genom att publicera det till NuGet- som ett paket. För att lära dig hur du gör, följ en NuGet-handledning:
Om du publicerar ett bibliotek som ett NuGet-paket kan andra installera och använda det. För att lära dig hur du gör, följ en NuGet-handledning:
Ett bibliotek behöver inte distribueras som ett paket. Den kan paketeras med en konsolapp som använder den. Mer information om hur du publicerar en konsolapp finns i den tidigare självstudien i den här serien:
Visual Studio Code-tillägget C# Dev Kit innehåller fler verktyg för att utveckla C#-appar och -bibliotek: