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í jednotek

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 jednou ze tří testovacích architektur, ze které si můžete vybrat. Ostatní jsou xUnit a nUnit.

  1. Spusťte Visual Studio Code.

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

  3. V Průzkumníku řešenívyberte Nový projektnebo na paletě příkazů vyberte .NET: Nový projekt.

  4. Vyberte MSTest Test Project, pojmenujte ho "StringLibraryTest," zvolte výchozí adresář a vyberte Vytvořit projekt.

    Š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 pro jednotkové testy provede následující:

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

Přidání odkazu na projekt

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

  1. V průzkumníku řešení klikněte pravým tlačítkem na projekt 'StringLibraryTest' a vyberte Přidat referenci projektu.

  2. Vyberte StringLibrary.

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

Když Visual Studio vyvolá test jednotek, spustí každou metodu označenou atributem TestMethodAttribute ve třídě označené 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 třídy Assert. 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 nejčastěji volaných metod třídy Assert jsou uvedeny v následující tabulce:

Metody Assert Funkce
Assert.AreEqual Ověřuje, že jsou dvě hodnoty nebo objekty stejné. Asertace selže, pokud se hodnoty nebo objekty nerovnají.
Assert.AreSame Ověřuje, že dvě proměnné objektu odkazují na stejný objekt. Tvrzení selže, pokud proměnné odkazují na různé objekty.
Assert.IsFalse Ověřuje, že podmínka je false. Asertace selže, pokud je podmínka true.
Assert.IsNotNull Ověřuje, že objekt není null. Assert selže, pokud je objekt null.

Můžete také použít Assert.ThrowsException (nebo Assert.Throws a Assert.ThrowsExactly, pokud v testovací metodě používáte metodu MSTest 3.8 a novější), která označuje typ výjimky, kterou se očekává vyvolání. Test selže, pokud není vyvolána zadaná výjimka.

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

Vzhledem k tomu, že metoda knihovny zpracovává řetězce, chcete také zajistit, aby úspěšně zpracovávala prázdný řetězec (String.Empty) a řetězec null. 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 metodu rozšíření na proměnnou string přiřazenou k null.

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 metodě TestStartsWithUpper obsahuje řecké velké písmeno alfa (U+0391) a velké písmeno cyrilice EM (U+041C). Test malých písmen v metodě TestDoesNotStartWithUpper zahrnuje řecké malé písmeno alfa (U+03B1) a cyrilické malé písmeno Ghe (U+0433).

  2. Uložte změny.

Sestavení a spuštění testů

  1. V Průzkumníku řešeníklikněte pravým tlačítkem na řešení a vyberte Sestavit nebo z palety příkazů vyberte .NET: Sestavit.

  2. Vyberte okno Testování, poté zvolte možnost Spustit testy, nebo v paletě příkazů vyberte Test: Spustit všechny testy.

    Test Explorer ve Visual Studio Code

Řešení 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. Potom do aplikace přidáte kód, který způsobí, že test projde. Pro účely tohoto kurzu jste vytvořili test po napsání kódu aplikace, který ověřuje, takže jste neviděli test selhat. Pokud chcete ověřit, že test selže, když očekáváte, že selže, přidejte do vstupu testu neplatnou hodnotu.

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

    string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                       "1234", ".", ";", " " };
    
  2. Testy spusťte kliknutím na zelenou chybu vedle testu v editoru.

    Výstup ukazuje, že test selže a zobrazí chybovou zprávu pro neúspěšný test: Assert.IsFalse selhal. Bylo očekáváno pro chybu: false; skutečný: true. Kvůli selhání nebyly v poli otestovány žádné řetězce za „Chybou“.

    neúspěšného testu editoru Visual Studio Code

  3. Odeberte řetězec Chyba, který jste přidali v kroku.

  4. 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í Release:

    dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
    

    Testy jsou úspěšné.

Ladění testů

Pokud jako integrované vývojové prostředí používáte Visual Studio Code, můžete použít stejný postup uvedený 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.csa vyberte Ladění testů v aktuálním souboru mezi řádky 7 a 8. Pokud ho nemůžete najít, stisknutím kláves Ctrl+Shift+P otevřete 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ší zdroje informací

Další kroky

V tomto kurzu jste otestovali knihovnu tříd. Knihovnu můžete zpřístupnit ostatním tak, že ji publikujete do NuGet 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:

Instalace a použití balíčku pomocí rozhraní příkazového řádku dotnet

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#: