Testa ett .NET-klassbibliotek med Hjälp av Visual Studio
Viktigt!
Microsoft har meddelat att Visual Studio för Mac upphör. Visual Studio för Mac stöds inte längre från och med den 31 augusti 2024. Alternativen är:
- Visual Studio Code med C# Dev Kit och relaterade tillägg, till exempel .NET MAUI och Unity.
- Visual Studio körs på Windows på en virtuell dator på Mac.
- Visual Studio körs på Windows på en virtuell dator i molnet.
Mer information finns i Visual Studio för Mac-meddelande om pensionering.
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 självstudien fungerar med lösningen som du skapar i Skapa ett .NET-klassbibliotek med Visual Studio för Mac.
Skapa ett enhetstestprojekt
Enhetstester ger automatiserad programvarutestning under din utveckling och publicering. MSTest är ett av tre testramverk som du kan välja mellan. De andra är xUnit och nUnit.
Starta Visual Studio för Mac.
Öppna lösningen
ClassLibraryProjects
som du skapade i Skapa ett .NET-klassbibliotek med Visual Studio för Mac.I lösningsblocket ctrl-klickar du på
ClassLibraryProjects
lösningen och väljer Lägg till>nytt projekt.I dialogrutan Nytt projekt väljer du Tester från noden Webb och Konsol. Välj MSTest-projektet följt av Nästa.
Välj .NET 5.0 som Målramverk och välj Nästa.
Ge det nya projektet namnet "StringLibraryTest" och välj Skapa.
Visual Studio skapar en klassfil med följande kod:
using Microsoft.VisualStudio.TestTools.UnitTesting; namespace StringLibraryTest { [TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { } } }
Källkoden som skapas av enhetstestmallen gör följande:
- Den importerar Microsoft.VisualStudio.TestTools.UnitTesting namnområdet, som innehåller de typer som används för enhetstestning.
- Det tillämpar TestClassAttribute attributet på
UnitTest1
klassen. - Det tillämpar attributet på TestMethodAttribute
TestMethod1
.
Varje metod som taggas med [TestMethod] i en testklass taggad med [TestClass] körs automatiskt när enhetstestet körs.
Lägga till en projektreferens
För att testprojektet ska fungera med StringLibrary
klassen lägger du till en referens till StringLibrary
projektet.
I solution pad ctrl-click Dependencies under StringLibraryTest. Välj Lägg till referens på snabbmenyn.
I dialogrutan Referenser väljer du projektet StringLibrary. Välj OK.
Lägga till och köra enhetstestmetoder
När Visual Studio kör ett enhetstest körs varje metod som är markerad med TestMethodAttribute attributet i en klass som är markerad med TestClassAttribute attributet. En testmetod slutar när det första felet hittas eller när alla tester i metoden har lyckats.
De vanligaste testerna anropar klassens Assert medlemmar. 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 | Function |
---|---|
Assert.AreEqual |
Verifierar att två värden eller objekt är lika med. Kontrollen misslyckas om värdena eller objekten inte är lika med. |
Assert.AreSame |
Verifierar att två objektvariabler refererar till samma objekt. Kontrollen misslyckas om variablerna refererar till olika objekt. |
Assert.IsFalse |
Verifierar att ett villkor är false . Kontrollen misslyckas om villkoret är true . |
Assert.IsNotNull |
Verifierar att ett objekt inte null är . Kontrollen misslyckas om objektet är null . |
Du kan också använda Assert.ThrowsException metoden i en testmetod för att ange vilken typ av undantag den förväntas generera. Testet misslyckas om det angivna undantaget inte utlöses.
När du testar StringLibrary.StartsWithUpper
metoden vill du ange ett antal strängar som börjar med ett versalt tecken. Du förväntar dig att metoden ska returneras true
i dessa fall, så att du kan anropa Assert.IsTrue metoden. 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 ska returneras false
i dessa fall, så att du kan anropa Assert.IsFalse metoden.
Eftersom biblioteksmetoden hanterar strängar vill du också se till att den hanterar en tom sträng (String.Empty
), en giltig sträng som inte har några tecken och vars Length är 0 och en null
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 för en string
variabel som tilldelats till 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 filen UnitTest1.cs och ersätt koden 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
TestStartsWithUpper
metoden innehåller den grekiska versaler alfa (U+0391) och kyrilliska versaler EM (U+041C). Testet av gemener i metoden innehåller den grekiska alfabeteckningenTestDoesNotStartWithUpper
(U+03B1) och den kyrilliska små bokstaven Ghe (U+0433).Välj Spara som på>menyraden. Kontrollera att Kodning är inställt på Unicode (UTF-8) i dialogrutan.
När du tillfrågas om du vill ersätta den befintliga filen väljer du Ersätt.
Om du inte sparar källkoden som en UTF8-kodad fil kan Visual Studio spara den som en ASCII-fil. När det händer avkodar körningen inte UTF8-tecknen utanför ASCII-intervallet korrekt och testresultaten blir inte korrekta.
Öppna panelen Enhetstester till höger på skärmen. Välj Visa>tester på menyn.
Klicka på Dock-ikonen för att hålla panelen öppen.
Klicka på knappen Kör alla .
Alla tester godkänns.
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 matrisen
words
TestDoesNotStartWithUpper
i metoden så att den innehåller strängen "Error". Du behöver inte spara filen eftersom Visual Studio automatiskt sparar öppna filer när en lösning skapas för att köra tester.string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };
Kör testerna igen.
Den här gången visar testutforskarens fönster att två tester lyckades och en misslyckades.
ctrl-click the failed test ,
TestDoesNotStartWithUpper
och välj Visa resultat pad från snabbmenyn.I resultat-satsen visas meddelandet som producerades av kontrollen: "Assert.IsFalse failed. Förväntas för "Error": false; actual: True". På grund av felet har inga strängar i matrisen efter att "Fel" testats.
Ta bort strängen "Fel" som du lade till i steg 1. Kör testet igen och testerna godkänns.
Testa versionen av biblioteket
Nu när testerna har godkänts när du kör felsökningsversionen av biblioteket kör du testerna ytterligare en gång mot versionsversionen av biblioteket. Ett antal faktorer, inklusive kompilatoroptimeringar, kan ibland ge olika beteende mellan felsöknings- och versionsversioner.
Så här testar du versionsversionen:
I Visual Studio-verktygsfältet ändrar du byggkonfigurationen från Felsökning till Version.
I solution pad ctrl-click the StringLibrary project (Lösningssats) ctrl-click the StringLibrary project (Strängbiblioteksprojektet) och välj Skapa på snabbmenyn för att kompilera om biblioteket.
Kör enhetstesterna igen.
Testerna godkänns.
Felsöka tester
Om du använder Visual Studio för Mac som din IDE kan du använda samma process som visas i Självstudie: Felsöka ett .NET-konsolprogram med Visual Studio för Mac för att felsöka kod med hjälp av ditt enhetstestprojekt. I stället för att starta ShowCase-appprojektet ctrl-klickar du på projektet StringLibraryTests och väljer Starta felsökning av projekt på snabbmenyn.
Visual Studio 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 självstudien testade du ett klassbibliotek. Du kan göra biblioteket tillgängligt för andra genom att publicera det till NuGet som ett paket. Om du vill veta hur du följer en NuGet-självstudie:
Om du publicerar ett bibliotek som ett NuGet-paket kan andra installera och använda det. Om du vill veta hur du följer en NuGet-självstudie:
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:
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för