Sdílet prostřednictvím


Kurz: Testování knihovny tříd .NET pomocí editoru Visual Studio Code

V tomto kurzu se dozvíte, jak automatizovat testování jednotek přidáním testovacího projektu do řešení.

Požadavky

Vytvoření projektu testování částí

Testy jednotek poskytují automatizované testování softwaru během vývoje a publikování. Testovací architektura, kterou používáte v tomto kurzu, je MSTest. MSTest je jedna ze tří testovacích architektur, ze které si můžete vybrat. Ostatní jsou xUnit a nUnit.

  1. Spusťte Visual Studio Code.

  2. ClassLibraryProjects Otevřete řešení, které jste vytvořili v vytvoření knihovny tříd .NET pomocí editoru Visual Studio Code.

  3. Vytvořte projekt testu jednotek s názvem StringLibraryTest.

    dotnet new mstest -o StringLibraryTest
    

    Šablona projektu vytvoří soubor UnitTest1.cs s následujícím kódem:

    namespace StringLibraryTest;
    
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
        }
    }
    

    Zdrojový kód vytvořený šablonou testu jednotek provede následující:

    Každá metoda označená metodou [TestMethod] v testovací třídě označené pomocí třídy [TestClass] se spustí automaticky při vyvolání testu jednotek.

  4. Přidejte do řešení testovací projekt.

    dotnet sln add StringLibraryTest/StringLibraryTest.csproj
    

Přidání odkazu na projekt

Aby testovací projekt fungoval s StringLibrary třídou, přidejte do projektu StringLibrary odkazStringLibraryTest.

  1. Spusťte následující příkaz:

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

Přidání a spuštění metod testování jednotek

Když Visual Studio vyvolá test jednotek, spustí každou metodu označenou TestMethodAttribute atributem ve třídě, která je označena atributem TestClassAttribute . Testovací metoda skončí, když se najde první selhání nebo když všechny testy obsažené v metodě proběhly úspěšně.

Nejběžnější testy volají členy Assert třídy. Mnoho metod assert zahrnuje alespoň dva parametry, jeden z nich je očekávaný výsledek testu a druhý z nich je skutečný výsledek testu. Některé z Assert nejčastěji nazývaných metod třídy jsou uvedené v následující tabulce:

Metody Assert Function
Assert.AreEqual Ověřuje, že jsou dvě hodnoty nebo objekty stejné. Kontrolní výraz selže, pokud se hodnoty nebo objekty nerovnají.
Assert.AreSame Ověřuje, že dvě proměnné objektu odkazují na stejný objekt. Kontrolní výraz selže, pokud proměnné odkazují na různé objekty.
Assert.IsFalse Ověřuje, že podmínka je false. Kontrolní výraz selže, pokud je truepodmínka .
Assert.IsNotNull Ověřuje, že objekt není null. Výraz selže, pokud je nullobjekt .

Můžete také použít metodu Assert.ThrowsException v testovací metodě k označení typu výjimky, kterou má vyvolat. Test selže, pokud není vyvolán zadaná výjimka.

Při testování StringLibrary.StartsWithUpper metody chcete zadat řadu řetězců, které začínají velkými písmeny. Očekáváte, že se metoda v těchto případech vrátí true , takže můžete metodu Assert.IsTrue volat. Podobně chcete zadat řadu řetězců, které začínají něčím jiným než velkým znakem. Očekáváte, že se metoda v těchto případech vrátí false , takže můžete metodu Assert.IsFalse volat.

Vzhledem k tomu, že vaše metoda knihovny zpracovává řetězce, chcete se také ujistit, že úspěšně zpracovává prázdný řetězec (String.Empty) a null řetězec. Prázdný řetězec je řetězec, který nemá žádné znaky a jehož Length je 0. Řetězec null je řetězec, který nebyl inicializován. Můžete volat StartsWithUpper přímo jako statickou metodu a předat jeden String argument. Nebo můžete volat StartsWithUpper jako rozšiřující metodu pro proměnnou přiřazenou stringnull.

Definujete tři metody, z nichž každá volá metodu Assert pro každý prvek v řetězcovém poli. Zavoláte přetížení metody, které vám umožní zadat chybovou zprávu, která se zobrazí v případě selhání testu. Zpráva identifikuje řetězec, který způsobil selhání.

Vytvoření testovacích metod:

  1. Otevřete StringLibraryTest/UnitTest1.cs a nahraďte veškerý kód následujícím kódem.

    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));
            }
        }
    }
    

    Test velkých písmen v TestStartsWithUpper metodě obsahuje řecké velké písmeno alfa (U+0391) a velké písmeno cyrilice EM (U+041C). Test malých písmen v TestDoesNotStartWithUpper metodě obsahuje řecké malé písmeno alfa (U+03B1) a malé písmeno cyrilice Ghe (U+0433).

  2. Uloží vaše změny.

  3. Spusťte testy:

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    Výstup terminálu ukazuje, že všechny testy proběhly úspěšně.

    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)
    

Zpracování selhání testů

Pokud provádíte vývoj řízený testy (TDD), nejdřív napíšete testy a při prvním spuštění selžou. Pak do aplikace přidáte kód, který test uspěje. Pro účely tohoto kurzu jste vytvořili test po napsání kódu aplikace, který ověří, takže se test nepovede. Pokud chcete ověřit, že test selže, když očekáváte, že selže, přidejte do vstupu testu neplatnou hodnotu.

  1. words Upravte pole v TestDoesNotStartWithUpper metodě tak, aby zahrnoval řetězec Error.

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

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    Výstup terminálu ukazuje, že jeden test selže a zobrazí chybovou zprávu pro neúspěšný test: Assert.IsFalse selhal. Byl očekáváno pro chybu: false; actual: True". Kvůli selhání nebyly po otestování chyby v poli žádné řetězce.

    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. Odeberte řetězec Chyba, který jste přidali v kroku 1. Znovu spusťte test a testy projdou.

Testování verze knihovny

Teď, když testy proběhly při spuštění sestavení ladění knihovny, spusťte testy ještě jednou oproti sestavení vydané verze knihovny. Řada faktorů, včetně optimalizací kompilátoru, může někdy způsobit jiné chování mezi sestaveními Debug a Release.

  1. Spusťte testy s konfigurací sestavení vydané verze:

    dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
    

    Testy jsou úspěšné.

Ladění testů

Pokud jako integrované vývojové prostředí (IDE) používáte Visual Studio Code, můžete použít stejný postup, který se zobrazuje v ladění konzolové aplikace .NET pomocí editoru Visual Studio Code k ladění kódu pomocí projektu testování jednotek. Místo spuštění projektu aplikace ShowCase otevřete StringLibraryTest/UnitTest1.cs a vyberte Ladit všechny testy mezi řádky 7 a 8. Pokud ho nemůžete najít, otevřete stisknutím kombinace kláves Ctrl+Shift+P paletu příkazů a zadejte Znovu načíst okno.

Visual Studio Code spustí testovací projekt s připojeným ladicím programem. Provádění se zastaví na libovolné zarážce, kterou jste přidali do testovacího projektu nebo základního kódu knihovny.

Další prostředky

Další kroky

V tomto kurzu jste otestovali knihovnu tříd. Knihovnu můžete zpřístupnit ostatním tak, že ji publikujete do NuGetu jako balíček. Postup najdete v kurzu NuGet:

Pokud publikujete knihovnu jako balíček NuGet, můžou ji nainstalovat a používat i ostatní uživatelé. Postup najdete v kurzu NuGet:

Knihovna nemusí být distribuována jako balíček. Může být součástí konzolové aplikace, která ji používá. Informace o publikování konzolové aplikace najdete v předchozím kurzu této série:

Sada Visual Studio Code extension C# Dev Kit poskytuje další nástroje pro vývoj aplikací a knihoven jazyka C#:

V tomto kurzu se dozvíte, jak automatizovat testování jednotek přidáním testovacího projektu do řešení.

Požadavky

Vytvoření projektu testování částí

Testy jednotek poskytují automatizované testování softwaru během vývoje a publikování. Testovací architektura, kterou používáte v tomto kurzu, je MSTest. MSTest je jedna ze tří testovacích architektur, ze které si můžete vybrat. Ostatní jsou xUnit a nUnit.

  1. Spusťte Visual Studio Code.

  2. ClassLibraryProjects Otevřete řešení, které jste vytvořili v vytvoření knihovny tříd .NET pomocí editoru Visual Studio Code.

  3. Vytvořte projekt testu jednotek s názvem StringLibraryTest.

    dotnet new mstest -o StringLibraryTest
    

    Šablona projektu vytvoří soubor UnitTest1.cs s následujícím kódem:

    using Microsoft.VisualStudio.TestTools.UnitTesting;
    
    namespace StringLibraryTest
    {
        [TestClass]
        public class UnitTest1
        {
            [TestMethod]
            public void TestMethod1()
            {
            }
        }
    }
    

    Zdrojový kód vytvořený šablonou testu jednotek provede následující:

    Každá metoda označená metodou [TestMethod] v testovací třídě označené pomocí třídy [TestClass] se spustí automaticky při vyvolání testu jednotek.

  4. Přidejte do řešení testovací projekt.

    dotnet sln add StringLibraryTest/StringLibraryTest.csproj
    

Přidání odkazu na projekt

Aby testovací projekt fungoval s StringLibrary třídou, přidejte do projektu StringLibrary odkazStringLibraryTest.

  1. Spusťte následující příkaz:

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

Přidání a spuštění metod testování jednotek

Když Visual Studio vyvolá test jednotek, spustí každou metodu označenou TestMethodAttribute atributem ve třídě, která je označena atributem TestClassAttribute . Testovací metoda skončí, když se najde první selhání nebo když všechny testy obsažené v metodě proběhly úspěšně.

Nejběžnější testy volají členy Assert třídy. Mnoho metod assert zahrnuje alespoň dva parametry, jeden z nich je očekávaný výsledek testu a druhý z nich je skutečný výsledek testu. Některé z Assert nejčastěji nazývaných metod třídy jsou uvedené v následující tabulce:

Metody Assert Function
Assert.AreEqual Ověřuje, že jsou dvě hodnoty nebo objekty stejné. Kontrolní výraz selže, pokud se hodnoty nebo objekty nerovnají.
Assert.AreSame Ověřuje, že dvě proměnné objektu odkazují na stejný objekt. Kontrolní výraz selže, pokud proměnné odkazují na různé objekty.
Assert.IsFalse Ověřuje, že podmínka je false. Kontrolní výraz selže, pokud je truepodmínka .
Assert.IsNotNull Ověřuje, že objekt není null. Výraz selže, pokud je nullobjekt .

Můžete také použít metodu Assert.ThrowsException v testovací metodě k označení typu výjimky, kterou má vyvolat. Test selže, pokud není vyvolán zadaná výjimka.

Při testování StringLibrary.StartsWithUpper metody chcete zadat řadu řetězců, které začínají velkými písmeny. Očekáváte, že se metoda v těchto případech vrátí true , takže můžete metodu Assert.IsTrue volat. Podobně chcete zadat řadu řetězců, které začínají něčím jiným než velkým znakem. Očekáváte, že se metoda v těchto případech vrátí false , takže můžete metodu Assert.IsFalse volat.

Vzhledem k tomu, že vaše metoda knihovny zpracovává řetězce, chcete se také ujistit, že úspěšně zpracovává prázdný řetězec (String.Empty) a null řetězec. Prázdný řetězec je řetězec, který nemá žádné znaky a jehož Length je 0. Řetězec null je řetězec, který nebyl inicializován. Můžete volat StartsWithUpper přímo jako statickou metodu a předat jeden String argument. Nebo můžete volat StartsWithUpper jako rozšiřující metodu pro proměnnou přiřazenou stringnull.

Definujete tři metody, z nichž každá volá metodu Assert pro každý prvek v řetězcovém poli. Zavoláte přetížení metody, které vám umožní zadat chybovou zprávu, která se zobrazí v případě selhání testu. Zpráva identifikuje řetězec, který způsobil selhání.

Vytvoření testovacích metod:

  1. Otevřete StringLibraryTest/UnitTest1.cs a nahraďte veškerý kód následujícím kódem.

    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));
            }
        }
    }
    

    Test velkých písmen v TestStartsWithUpper metodě obsahuje řecké velké písmeno alfa (U+0391) a velké písmeno cyrilice EM (U+041C). Test malých písmen v TestDoesNotStartWithUpper metodě obsahuje řecké malé písmeno alfa (U+03B1) a malé písmeno cyrilice Ghe (U+0433).

  2. Uloží vaše změny.

  3. Spusťte testy:

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    Výstup terminálu ukazuje, že všechny testy proběhly úspěšně.

    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)
    

Zpracování selhání testů

Pokud provádíte vývoj řízený testy (TDD), nejdřív napíšete testy a při prvním spuštění selžou. Pak do aplikace přidáte kód, který test uspěje. Pro účely tohoto kurzu jste vytvořili test po napsání kódu aplikace, který ověří, takže se test nepovede. Pokud chcete ověřit, že test selže, když očekáváte, že selže, přidejte do vstupu testu neplatnou hodnotu.

  1. words Upravte pole v TestDoesNotStartWithUpper metodě tak, aby zahrnoval řetězec Error.

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

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    Výstup terminálu ukazuje, že jeden test selže a zobrazí chybovou zprávu pro neúspěšný test: Assert.IsFalse selhal. Byl očekáváno pro chybu: false; actual: True". Kvůli selhání nebyly po otestování chyby v poli žádné řetězce.

    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. Odeberte řetězec Chyba, který jste přidali v kroku 1. Znovu spusťte test a testy projdou.

Testování verze knihovny

Teď, když testy proběhly při spuštění sestavení ladění knihovny, spusťte testy ještě jednou oproti sestavení vydané verze knihovny. Řada faktorů, včetně optimalizací kompilátoru, může někdy způsobit jiné chování mezi sestaveními Debug a Release.

  1. Spusťte testy s konfigurací sestavení vydané verze:

    dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
    

    Testy jsou úspěšné.

Ladění testů

Pokud jako integrované vývojové prostředí (IDE) používáte Visual Studio Code, můžete použít stejný postup, který se zobrazuje v ladění konzolové aplikace .NET pomocí editoru Visual Studio Code k ladění kódu pomocí projektu testování jednotek. Místo spuštění projektu aplikace ShowCase otevřete StringLibraryTest/UnitTest1.cs a vyberte Ladit všechny testy mezi řádky 7 a 8. Pokud ho nemůžete najít, otevřete stisknutím kombinace kláves Ctrl+Shift+P paletu příkazů a zadejte Znovu načíst okno.

Visual Studio Code spustí testovací projekt s připojeným ladicím programem. Provádění se zastaví na libovolné zarážce, kterou jste přidali do testovacího projektu nebo základního kódu knihovny.

Další prostředky

Další kroky

V tomto kurzu jste otestovali knihovnu tříd. Knihovnu můžete zpřístupnit ostatním tak, že ji publikujete do NuGetu jako balíček. Postup najdete v kurzu NuGet:

Pokud publikujete knihovnu jako balíček NuGet, můžou ji nainstalovat a používat i ostatní uživatelé. Postup najdete v kurzu NuGet:

Knihovna nemusí být distribuována jako balíček. Může být součástí konzolové aplikace, která ji používá. Informace o publikování konzolové aplikace najdete v předchozím kurzu této série:

V tomto kurzu se dozvíte, jak automatizovat testování jednotek přidáním testovacího projektu do řešení.

Požadavky

Vytvoření projektu testování částí

Testy jednotek poskytují automatizované testování softwaru během vývoje a publikování. Testovací architektura, kterou používáte v tomto kurzu, je MSTest. MSTest je jedna ze tří testovacích architektur, ze které si můžete vybrat. Ostatní jsou xUnit a nUnit.

  1. Spusťte Visual Studio Code.

  2. ClassLibraryProjects Otevřete řešení, které jste vytvořili v vytvoření knihovny tříd .NET pomocí editoru Visual Studio Code.

  3. Vytvořte projekt testu jednotek s názvem StringLibraryTest.

    dotnet new mstest -f net6.0 -o StringLibraryTest
    

    Příkaz -f net6.0 změní výchozí cílovou architekturu na net6.0 verzi.

    Příkaz -o nebo --output určuje umístění pro umístění vygenerovaného výstupu.

    Šablona projektu vytvoří soubor UnitTest1.cs s následujícím kódem:

    using Microsoft.VisualStudio.TestTools.UnitTesting;
    
    namespace StringLibraryTest
    {
        [TestClass]
        public class UnitTest1
        {
            [TestMethod]
            public void TestMethod1()
            {
            }
        }
    }
    

    Zdrojový kód vytvořený šablonou testu jednotek provede následující:

    Každá metoda označená metodou [TestMethod] v testovací třídě označené pomocí třídy [TestClass] se spustí automaticky při vyvolání testu jednotek.

  4. Přidejte do řešení testovací projekt.

    dotnet sln add StringLibraryTest/StringLibraryTest.csproj
    

Přidání odkazu na projekt

Aby testovací projekt fungoval s StringLibrary třídou, přidejte do projektu StringLibrary odkazStringLibraryTest.

  1. Spusťte následující příkaz:

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

Přidání a spuštění metod testování jednotek

Když Visual Studio vyvolá test jednotek, spustí každou metodu označenou TestMethodAttribute atributem ve třídě, která je označena atributem TestClassAttribute . Testovací metoda skončí, když se najde první selhání nebo když všechny testy obsažené v metodě proběhly úspěšně.

Nejběžnější testy volají členy Assert třídy. Mnoho metod assert zahrnuje alespoň dva parametry, jeden z nich je očekávaný výsledek testu a druhý z nich je skutečný výsledek testu. Některé z Assert nejčastěji nazývaných metod třídy jsou uvedené v následující tabulce:

Metody Assert Function
Assert.AreEqual Ověřuje, že jsou dvě hodnoty nebo objekty stejné. Kontrolní výraz selže, pokud se hodnoty nebo objekty nerovnají.
Assert.AreSame Ověřuje, že dvě proměnné objektu odkazují na stejný objekt. Kontrolní výraz selže, pokud proměnné odkazují na různé objekty.
Assert.IsFalse Ověřuje, že podmínka je false. Kontrolní výraz selže, pokud je truepodmínka .
Assert.IsNotNull Ověřuje, že objekt není null. Výraz selže, pokud je nullobjekt .

Můžete také použít metodu Assert.ThrowsException v testovací metodě k označení typu výjimky, kterou má vyvolat. Test selže, pokud není vyvolán zadaná výjimka.

Při testování StringLibrary.StartsWithUpper metody chcete zadat řadu řetězců, které začínají velkými písmeny. Očekáváte, že se metoda v těchto případech vrátí true , takže můžete metodu Assert.IsTrue volat. Podobně chcete zadat řadu řetězců, které začínají něčím jiným než velkým znakem. Očekáváte, že se metoda v těchto případech vrátí false , takže můžete metodu Assert.IsFalse volat.

Vzhledem k tomu, že vaše metoda knihovny zpracovává řetězce, chcete se také ujistit, že úspěšně zpracovává prázdný řetězec (String.Empty) a null řetězec. Prázdný řetězec je řetězec, který nemá žádné znaky a jehož Length je 0. Řetězec null je řetězec, který nebyl inicializován. Můžete volat StartsWithUpper přímo jako statickou metodu a předat jeden String argument. Nebo můžete volat StartsWithUpper jako rozšiřující metodu pro proměnnou přiřazenou stringnull.

Definujete tři metody, z nichž každá volá metodu Assert pro každý prvek v řetězcovém poli. Zavoláte přetížení metody, které vám umožní zadat chybovou zprávu, která se zobrazí v případě selhání testu. Zpráva identifikuje řetězec, který způsobil selhání.

Vytvoření testovacích metod:

  1. Otevřete StringLibraryTest/UnitTest1.cs a nahraďte veškerý kód následujícím kódem.

    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));
            }
        }
    }
    

    Test velkých písmen v TestStartsWithUpper metodě obsahuje řecké velké písmeno alfa (U+0391) a velké písmeno cyrilice EM (U+041C). Test malých písmen v TestDoesNotStartWithUpper metodě obsahuje řecké malé písmeno alfa (U+03B1) a malé písmeno cyrilice Ghe (U+0433).

  2. Uloží vaše změny.

  3. Spusťte testy:

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    Výstup terminálu ukazuje, že všechny testy proběhly úspěšně.

    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)
    

Zpracování selhání testů

Pokud provádíte vývoj řízený testy (TDD), nejdřív napíšete testy a při prvním spuštění selžou. Pak do aplikace přidáte kód, který test uspěje. Pro účely tohoto kurzu jste vytvořili test po napsání kódu aplikace, který ověří, takže se test nepovede. Pokud chcete ověřit, že test selže, když očekáváte, že selže, přidejte do vstupu testu neplatnou hodnotu.

  1. words Upravte pole v TestDoesNotStartWithUpper metodě tak, aby zahrnoval řetězec Error.

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

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    Výstup terminálu ukazuje, že jeden test selže a zobrazí chybovou zprávu pro neúspěšný test: Assert.IsFalse selhal. Byl očekáváno pro chybu: false; actual: True". Kvůli selhání nebyly po otestování chyby v poli žádné řetězce.

    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. Odeberte řetězec Chyba, který jste přidali v kroku 1. Znovu spusťte test a testy projdou.

Testování verze knihovny

Teď, když testy proběhly při spuštění sestavení ladění knihovny, spusťte testy ještě jednou oproti sestavení vydané verze knihovny. Řada faktorů, včetně optimalizací kompilátoru, může někdy způsobit jiné chování mezi sestaveními Debug a Release.

  1. Spusťte testy s konfigurací sestavení vydané verze:

    dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
    

    Testy jsou úspěšné.

Ladění testů

Pokud jako integrované vývojové prostředí (IDE) používáte Visual Studio Code, můžete použít stejný postup, který se zobrazuje v ladění konzolové aplikace .NET pomocí editoru Visual Studio Code k ladění kódu pomocí projektu testování jednotek. Místo spuštění projektu aplikace ShowCase otevřete StringLibraryTest/UnitTest1.cs a vyberte Ladit všechny testy mezi řádky 7 a 8. Pokud ho nemůžete najít, otevřete stisknutím kombinace kláves Ctrl+Shift+P paletu příkazů a zadejte Znovu načíst okno.

Visual Studio Code spustí testovací projekt s připojeným ladicím programem. Provádění se zastaví na libovolné zarážce, kterou jste přidali do testovacího projektu nebo základního kódu knihovny.

Další prostředky

Další kroky

V tomto kurzu jste otestovali knihovnu tříd. Knihovnu můžete zpřístupnit ostatním tak, že ji publikujete do NuGetu jako balíček. Postup najdete v kurzu NuGet:

Pokud publikujete knihovnu jako balíček NuGet, můžou ji nainstalovat a používat i ostatní uživatelé. Postup najdete v kurzu NuGet:

Knihovna nemusí být distribuována jako balíček. Může být součástí konzolové aplikace, která ji používá. Informace o publikování konzolové aplikace najdete v předchozím kurzu této série: