Megosztás a következőn keresztül:


Oktatóanyag: .NET-osztálykódtár tesztelése a Visual Studio Code használatával

Ez az oktatóanyag bemutatja, hogyan automatizálhatja az egységtesztelést egy tesztprojekt megoldáshoz való hozzáadásával.

Előfeltételek

Egységtesztelési projekt létrehozása

Az egységtesztek automatizált szoftvertesztelést biztosítanak a fejlesztés és a közzététel során. Az oktatóanyagban használt tesztelési keretrendszer az MSTest. MSTest a három választható tesztelési keretrendszer egyike. A többi xUnit és nUnit.

  1. Indítsa el a Visual Studio Code-ot.

  2. Nyissa meg a ClassLibraryProjects megoldást, amelyet a , a ".NET osztálykönyvtár létrehozása a Visual Studio Code használatával" részben készített el (lépés).

  3. A Megoldáskezelőterületen válassza Új projektlehetőséget, vagy a parancskatalógusban válassza a .NET: Új projektlehetőséget.

  4. Válassza MSTest Test Project, adja neki a "StringLibraryTest" nevet, válassza ki az alapértelmezett könyvtárat, és válassza a Projekt létrehozásalehetőséget.

    A projektsablon létrehoz egy UnitTest1.cs fájlt a következő kóddal:

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

    Az egységtesztsablon által létrehozott forráskód a következőket teszi:

    Amikor egy tesztosztályt [TestClass] címkével látunk el, az abban található, [TestMethod] címkével ellátott metódusok automatikusan futnak az egységteszt meghívásakor.

Projekthivatkozás hozzáadása

Ahhoz, hogy a tesztprojekt együttműködjön a StringLibrary osztálysal, adjon hozzá egy hivatkozást a StringLibraryTest projektben a StringLibrary projekthez.

  1. A Megoldáskezelőben kattintson a jobb gombbal a StringLibraryTest projektre, és válassza a Projekthivatkozás hozzáadásalehetőséget.

  2. Válassza a "StringLibrary" lehetőséget.

Egységtesztelési módszerek hozzáadása és futtatása

Amikor a Visual Studio meghív egy egységtesztet, minden olyan metódust futtat, amely a TestMethodAttribute attribútummal van megjelölve egy TestClassAttribute attribútummal megjelölt osztályban. A tesztmetódus akkor fejeződik be, amikor az első hiba található, vagy ha a metódusban található összes teszt sikeres volt.

A leggyakoribb tesztek az Assert osztály tagjait hívják meg. Számos érvényesítési módszer tartalmaz legalább két paramétert, amelyek közül az egyik a várt vizsgálati eredmény, a másik pedig a tényleges teszteredmény. Az Assert osztály leggyakrabban nevezett módszereinek némelyike az alábbi táblázatban látható:

Assertálási módszerek Funkció
Assert.AreEqual Ellenőrzi, hogy két érték vagy objektum egyenlő-e. Az állítás meghiúsul, ha az értékek vagy objektumok nem egyenlők.
Assert.AreSame Ellenőrzi, hogy két objektumváltozó ugyanarra az objektumra hivatkozik-e. Az állítás meghiúsul, ha a változók különböző objektumokra hivatkoznak.
Assert.IsFalse Ellenőrzi, hogy false-e egy feltétel. Az állítás meghiúsul, ha a feltétel true.
Assert.IsNotNull Ellenőrzi, hogy egy objektum nem null. Az állítás meghiúsul, ha az objektum null.

A Assert.ThrowsException (vagy Assert.Throws és Assert.ThrowsExactly msTest 3.8 és újabb verziók esetén) metódust is használhatja egy tesztmetódusban, hogy jelezze a várható kivétel típusát. A teszt meghiúsul, ha a megadott kivétel nem dobódik.

A StringLibrary.StartsWithUpper metódus tesztelése során több olyan karakterláncot szeretne megadni, amelyek nagy kezdőbetűvel kezdődnek. Ezekben az esetekben a metódus várhatóan true ad vissza, így meghívhatja a Assert.IsTrue metódust. Ehhez hasonlóan több karakterláncot is meg szeretne adni, amelyek nem nagybetűvel kezdődnek. Ezekben az esetekben a metódus várhatóan false ad vissza, így meghívhatja a Assert.IsFalse metódust.

Mivel a kódtár metódusa sztringeket kezel, azt is meg kell győződnie arról, hogy sikeresen kezeli az üres sztringet (String.Empty) és egy null sztringet. Az üres sztring olyan, amelynek nincs karaktere, és amelynek Length 0. A null string olyan, amely még nem lett inicializálva. A StartsWithUpper-t közvetlenül meghívhatja statikus metódusként, és egyetlen String argumentumot adhat át. Vagy meghívhatja a StartsWithUpper-t bővítménymetódusként egy string-höz rendelt null változón.

Három metódust fog definiálni, amelyek mindegyike egy Assert metódust hív meg egy sztringtömb minden eleméhez. Egy metódus túlterhelését fogja meghívni, amely lehetővé teszi egy hibaüzenet megadását, amely teszthiba esetén jelenik meg. Az üzenet azonosítja a hibát okozó sztringet.

A tesztelési módszerek létrehozása:

  1. Nyissa meg StringLibraryTest/UnitTest1.cs, és cserélje le az összes kódot a következő kódra.

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

    A TestStartsWithUpper metódus nagybetűinek vizsgálata magában foglalja a görög alfa betűt (U+0391) és az EM cirill betűt (U+041C). A kisbetűk vizsgálata a TestDoesNotStartWithUpper metódusban a görög kis alfa betűt (U+03B1) és a cirill kis Ghe betűt (U+0433) tartalmazza.

  2. Mentse a módosításokat.

Tesztek létrehozása és futtatása

  1. A Megoldáskezelőbenkattintson a jobb gombbal a megoldásra, és válassza a Build vagy a Parancskatalógusban válassza a .NET: Buildlehetőséget.

  2. Válassza a Tesztelési ablakot, válassza a Tesztek futtatása vagy a Parancskatalógusban válassza a Teszt: Az összes teszt futtatásalehetőséget.

    Visual Studio Code Test Explorer

Teszthibák kezelése

Ha tesztalapú fejlesztést (TDD) végez, először teszteket kell írnia, és az első futtatáskor sikertelenek lesznek. Ezután kódot ad hozzá az alkalmazáshoz, amely sikeressé teszi a tesztet. Ebben az oktatóanyagban az érvényesített alkalmazáskód megírása után hozta létre a tesztet, így nem látta a teszt sikertelenségét. Annak ellenőrzéséhez, hogy egy teszt sikertelen lesz-e, amikor azt várja, adjon hozzá egy érvénytelen értéket a teszt bemenetéhez.

  1. Módosítsa a words tömböt a TestDoesNotStartWithUpper metódusban, hogy tartalmazza a "Hiba" sztringet.

    string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                       "1234", ".", ";", " " };
    
  2. A tesztek futtatásához kattintson a teszt melletti zöld hibára a szerkesztőben.

    A kimenet azt mutatja, hogy a teszt sikertelen, és hibaüzenetet ad a sikertelen teszthez: "Assert.IsFalse failed. "Hiba" várható: hamis; tényleges: Igaz". A hiba miatt a "Hiba" utáni sztringeket a tömbben nem tesztelték.

    Visual Studio Code sikertelen tesztelési

  3. Távolítsa el a lépésben hozzáadott "Hiba" sztringet.

  4. Futtassa újra a tesztet, és a tesztek sikeresen lefutnak.

A kódtár kiadási verziójának tesztelése

Most, hogy az összes teszt sikeresen lefutott a kódtár hibakeresési buildjének futtatásakor, futtassa a teszteket még egyszer a kódtár kiadási buildjéhez. Számos tényező, köztük az optimalizációk, néha eltérő viselkedést eredményezhetnek a Debug és a Release build változatok között.

  1. Futtassa a teszteket a Release build konfigurációval:

    dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
    

    A tesztek sikeresek.

Hibakeresési tesztek

Ha a Visual Studio Code-ot használja integrált fejlesztőkörnyezetként, ugyanazt a folyamatot alkalmazhatja, amelyet a .NET-konzolalkalmazás hibakeresése a Visual Studio Code használatával mutattunk be, hogy hibakeresse a kódot az egységteszt projektjében. Ahelyett, hogy elindítja a ShowCase alkalmazásprojektet, nyissa meg StringLibraryTest/UnitTest1.cs, majd válassza Hibakeresési tesztek lehetőséget az aktuális fájlban, a 7. és a 8. sor között. Ha nem találja, nyomja le a Ctrl+Shift+P billentyűkombinációt a parancs paletta megnyitásához, és írja be az Ablak Újratöltéseparancsot.

A Visual Studio Code elindítja a tesztprojektet a hibakereső csatolásával. A végrehajtás leáll a tesztprojekthez vagy a mögöttes kódtár kódjához hozzáadott bármely töréspontnál.

További erőforrások

Következő lépések

Ebben az oktatóanyagban egy osztálykönyvtárat teszteltél egységenként. A kódtárat elérhetővé teheti mások számára, ha csomagként közzéteszi azt NuGet. Ha szeretné megtudni, hogyan, kövesse a NuGet-oktatóanyagot:

Ha NuGet-csomagként tesz közzé egy tárat, mások is telepíthetik és használhatják. Ha szeretné megtudni, hogyan, kövesse a NuGet-oktatóanyagot:

A kódtárakat nem kell csomagként terjeszteni. Az azt használó konzolalkalmazással együtt is csomagolható. A konzolalkalmazások közzétételének módjáról a sorozat korábbi oktatóanyagában olvashat:

A Visual Studio Code C# Dev Kit bővítménye további eszközöket biztosít c# alkalmazások és kódtárak fejlesztéséhez: