Dela via


Självstudie: 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

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 som du kan välja mellan. De andra är xUnit och nUnit.

  1. Starta Visual Studio Code.

  2. Öppna lösningen ClassLibraryProjects som du skapade i Skapa ett .NET-klassbibliotek med Visual Studio Code.

  3. Skapa ett enhetstestprojekt med namnet "StringLibraryTest".

    dotnet new mstest -o StringLibraryTest
    

    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:

    Varje metod som taggas med [TestMethod] i en testklass taggad med [TestClass] körs automatiskt när enhetstestet anropas.

  4. Lägg till testprojektet i lösningen.

    dotnet sln add StringLibraryTest/StringLibraryTest.csproj
    

Lägga till en projektreferens

För att testprojektet ska fungera med StringLibrary klassen lägger du till en referens i StringLibraryTest projektet i StringLibrary projektet.

  1. Kör följande kommando:

    dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj
    

Lägga till och köra enhetstestmetoder

När Visual Studio anropar 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) 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 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:

  1. Ö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 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 alfabeteckningen TestDoesNotStartWithUpper (U+03B1) och den kyrilliska små bokstaven Ghe (U+0433).

  2. Spara dina ändringar.

  3. Kör testerna:

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    Terminalutdata visar att alla tester har godkänts.

    Starting test execution, please wait...
    A total of 1 test files matched the specified pattern.
    
    Passed!  - Failed:     0, Passed:     3, Skipped:     0, Total:     3, Duration: 3 ms - StringLibraryTest.dll (net8.0)
    

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.

  1. Ändra matrisen wordsTestDoesNotStartWithUpper i metoden så att den innehåller strängen "Error".

    string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                       "1234", ".", ";", " " };
    
  2. Kör testerna:

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    Terminalutdata visar att ett test 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 har inga strängar i matrisen efter att "Fel" testats.

    Starting test execution, please wait...
    A total of 1 test files matched the specified pattern.
      Failed TestDoesNotStartWithUpper [28 ms]
      Error Message:
       Assert.IsFalse failed. Expected for 'Error': false; Actual: True
      Stack Trace:
         at StringLibraryTest.UnitTest1.TestDoesNotStartWithUpper() in C:\ClassLibraryProjects\StringLibraryTest\UnitTest1.cs:line 33
    
    Failed!  - Failed:     1, Passed:     2, Skipped:     0, Total:     3, Duration: 31 ms - StringLibraryTest.dll (net5.0)
    
  3. 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.

  1. Kör testerna med versionskonfigurationen:

    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 ditt enhetstestprojekt. I stället för att starta ShowCase-appprojektet öppnar du StringLibraryTest/UnitTest1.cs och väljer Felsöka alla tester mellan raderna 7 och 8. Om du inte hittar den trycker du på Ctrl+Skift+P för att öppna kommandopaletten och anger 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 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:

Visual Studio Code-tillägget C# Dev Kit innehåller fler verktyg för att utveckla C#-appar och -bibliotek:

Den här självstudien visar hur du automatiserar enhetstestning genom att lägga till ett testprojekt i en lösning.

Förutsättningar

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 som du kan välja mellan. De andra är xUnit och nUnit.

  1. Starta Visual Studio Code.

  2. Öppna lösningen ClassLibraryProjects som du skapade i Skapa ett .NET-klassbibliotek med Visual Studio Code.

  3. Skapa ett enhetstestprojekt med namnet "StringLibraryTest".

    dotnet new mstest -o StringLibraryTest
    

    Projektmallen skapar en UnitTest1.cs-fil 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:

    Varje metod som taggas med [TestMethod] i en testklass taggad med [TestClass] körs automatiskt när enhetstestet anropas.

  4. Lägg till testprojektet i lösningen.

    dotnet sln add StringLibraryTest/StringLibraryTest.csproj
    

Lägga till en projektreferens

För att testprojektet ska fungera med StringLibrary klassen lägger du till en referens i StringLibraryTest projektet i StringLibrary projektet.

  1. Kör följande kommando:

    dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj
    

Lägga till och köra enhetstestmetoder

När Visual Studio anropar 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) 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 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:

  1. Ö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 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 alfabeteckningen TestDoesNotStartWithUpper (U+03B1) och den kyrilliska små bokstaven Ghe (U+0433).

  2. Spara dina ändringar.

  3. Kör testerna:

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    Terminalutdata visar att alla tester har godkänts.

    Starting test execution, please wait...
    A total of 1 test files matched the specified pattern.
    
    Passed!  - Failed:     0, Passed:     3, Skipped:     0, Total:     3, Duration: 3 ms - StringLibraryTest.dll (net7.0)
    

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.

  1. Ändra matrisen wordsTestDoesNotStartWithUpper i metoden så att den innehåller strängen "Error".

    string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                       "1234", ".", ";", " " };
    
  2. Kör testerna:

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    Terminalutdata visar att ett test 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 har inga strängar i matrisen efter att "Fel" testats.

    Starting test execution, please wait...
    A total of 1 test files matched the specified pattern.
      Failed TestDoesNotStartWithUpper [28 ms]
      Error Message:
       Assert.IsFalse failed. Expected for 'Error': false; Actual: True
      Stack Trace:
         at StringLibraryTest.UnitTest1.TestDoesNotStartWithUpper() in C:\ClassLibraryProjects\StringLibraryTest\UnitTest1.cs:line 33
    
    Failed!  - Failed:     1, Passed:     2, Skipped:     0, Total:     3, Duration: 31 ms - StringLibraryTest.dll (net5.0)
    
  3. 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.

  1. Kör testerna med versionskonfigurationen:

    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 ditt enhetstestprojekt. I stället för att starta ShowCase-appprojektet öppnar du StringLibraryTest/UnitTest1.cs och väljer Felsöka alla tester mellan raderna 7 och 8. Om du inte hittar den trycker du på Ctrl+Skift+P för att öppna kommandopaletten och anger 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 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:

Den här självstudien visar hur du automatiserar enhetstestning genom att lägga till ett testprojekt i en lösning.

Förutsättningar

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 som du kan välja mellan. De andra är xUnit och nUnit.

  1. Starta Visual Studio Code.

  2. Öppna lösningen ClassLibraryProjects som du skapade i Skapa ett .NET-klassbibliotek med Visual Studio Code.

  3. Skapa ett enhetstestprojekt med namnet "StringLibraryTest".

    dotnet new mstest -f net6.0 -o StringLibraryTest
    

    Kommandot -f net6.0 ändrar standardmålramverket till net6.0 version.

    Kommandot -o eller --output anger platsen där de genererade utdata ska placeras.

    Projektmallen skapar en UnitTest1.cs-fil 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:

    Varje metod som taggas med [TestMethod] i en testklass taggad med [TestClass] körs automatiskt när enhetstestet anropas.

  4. Lägg till testprojektet i lösningen.

    dotnet sln add StringLibraryTest/StringLibraryTest.csproj
    

Lägga till en projektreferens

För att testprojektet ska fungera med StringLibrary klassen lägger du till en referens i StringLibraryTest projektet i StringLibrary projektet.

  1. Kör följande kommando:

    dotnet add StringLibraryTest/StringLibraryTest.csproj reference StringLibrary/StringLibrary.csproj
    

Lägga till och köra enhetstestmetoder

När Visual Studio anropar 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) 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 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:

  1. Ö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 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 alfabeteckningen TestDoesNotStartWithUpper (U+03B1) och den kyrilliska små bokstaven Ghe (U+0433).

  2. Spara dina ändringar.

  3. Kör testerna:

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    Terminalutdata visar att alla tester har godkänts.

    Starting test execution, please wait...
    A total of 1 test files matched the specified pattern.
    
    Passed!  - Failed:     0, Passed:     3, Skipped:     0, Total:     3, Duration: 3 ms - StringLibraryTest.dll (net6.0)
    

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.

  1. Ändra matrisen wordsTestDoesNotStartWithUpper i metoden så att den innehåller strängen "Error".

    string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                       "1234", ".", ";", " " };
    
  2. Kör testerna:

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    Terminalutdata visar att ett test 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 har inga strängar i matrisen efter att "Fel" testats.

    Starting test execution, please wait...
    A total of 1 test files matched the specified pattern.
      Failed TestDoesNotStartWithUpper [28 ms]
      Error Message:
       Assert.IsFalse failed. Expected for 'Error': false; Actual: True
      Stack Trace:
         at StringLibraryTest.UnitTest1.TestDoesNotStartWithUpper() in C:\ClassLibraryProjects\StringLibraryTest\UnitTest1.cs:line 33
    
    Failed!  - Failed:     1, Passed:     2, Skipped:     0, Total:     3, Duration: 31 ms - StringLibraryTest.dll (net5.0)
    
  3. 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.

  1. Kör testerna med versionskonfigurationen:

    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 ditt enhetstestprojekt. I stället för att starta ShowCase-appprojektet öppnar du StringLibraryTest/UnitTest1.cs och väljer Felsöka alla tester mellan raderna 7 och 8. Om du inte hittar den trycker du på Ctrl+Skift+P för att öppna kommandopaletten och anger 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 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: