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


Oktatóanyag: .NET-osztálytár tesztelése a .NET használatával a Visual Studió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

Ez az oktatóanyag a Visual Studiohasználatával létrehozott .NET-osztálytár létrehozása című témakörben létrehozott megoldással működik.

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. MSTest a három választható tesztelési keretrendszer egyike. A többi xUnit és nUnit.

  1. Indítsa el a Visual Studiót.

  2. Nyissa meg a ClassLibraryProjects megoldást, amelyet a feladat során egy .NET-osztálykönyvtár létrehozásával hozott létre, a Visual Studiohasználatával.

  3. Adjon hozzá egy "StringLibraryTest" nevű új egységtesztelési projektet a megoldáshoz.

    1. Kattintson a jobb gombbal a megoldásra Megoldáskezelő, és válassza a >Új projekt hozzáadásalehetőséget.

    2. Az Új projekt hozzáadása oldalon írja be mstest a keresőmező mezőbe. Válassza C# vagy Visual Basic a Nyelv listából, majd válassza a Minden platform lehetőséget a platformlistában.

    3. Válassza a MSTest Test Project sablont, majd válassza a Továbblehetőséget.

    4. Az Új projekt konfigurálása lapon írja be StringLibraryTest a Projekt neve mezőbe. Ezután válassza a Következőlehetőséget.

    5. A További információk lapon válassza .NET 8 a Keretrendszer mezőben. Ezután válassza az létrehozása opciót.

  4. A Visual Studio létrehozza a projektet, és megnyitja az osztályfájlt a kódablakban az alábbi kóddal. Ha a használni kívánt nyelv nem jelenik meg, módosítsa a nyelvválasztót a lap tetején.

    namespace StringLibraryTest;
    
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
        }
    }
    
    Imports Microsoft.VisualStudio.TestTools.UnitTesting
    
    Namespace StringLibraryTest
        <TestClass>
        Public Class UnitTest1
            <TestMethod>
            Sub TestSub()
    
            End Sub
        End Class
    End Namespace
    

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

    • Importálja a Microsoft.VisualStudio.TestTools.UnitTesting névteret, amely az egységteszteléshez használt típusokat tartalmazza. A C# nyelvben a névteret egy global using irányelven keresztül importáljuk a GlobalUsings.cs-ben.
    • Alkalmazza az TestClassAttribute attribútumot az UnitTest1 osztályra.
    • Alkalmazza a TestMethodAttribute attribútumot a TestMethod1 C#-ben vagy a TestSub Visual Basic-ben való definiálására.

    A [TestClass] címkével ellátott tesztosztályban a [TestMethod] címkével ellátott metódusok automatikusan futnak az egységteszt futtatásakor.

Projekthivatkozás hozzáadása

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

  1. A Megoldáskezelőbenkattintson a jobb gombbal a StringLibraryTest projekt Függőségek csomópontjára, és válassza a helyi menüben a Projekthivatkozás hozzáadása lehetőséget.

  2. A Reference Manager párbeszédpanelen bontsa ki a Projektek csomópontot, és jelölje ki a StringLibrarymelletti jelölőnégyzetet. Referencia hozzáadásával a StringLibrary szerelvényhez a fordító megkeresheti a StringLibrary metódusait a StringLibraryTest projekt fordítása során.

  3. Válassza OKlehetőséget.

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

Amikor a Visual Studio egy egységtesztet futtat, végrehajtja az TestMethodAttribute attribútummal megjelölt osztályban az attribútummal TestClassAttribute megjelölt összes metódust. A tesztmetódus az első hiba vagy a metódusban található összes teszt sikeressége esetén ér véget.

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 egy feltétel false-e. 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 sikertelen, ha a megadott kivétel nincs dobva.

A metódus tesztelése StringLibrary.StartsWithUpper során sok olyan karakterláncot szeretne megadni, amelyek nagybetűvel kezdődnek. Ezekben az esetekben a metódus várhatóan true ad vissza, így meghívhatja a Assert.IsTrue metódust. Hasonlóképpen, szeretne számos olyan karakterláncot megadni, amelyek valami mással kezdődnek, mint egy nagybetű. 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 a üres sztringet (String.Empty), egy olyan érvényes sztringet, amelynek nincs karaktere, és amelynek Length 0, valamint egy null sztringet, amely nincs inicializálva. Hívjon StartsWithUpper közvetlenül statikus metódusként, és adjon át egyetlen String argumentumot. Használj StartsWithUpper bővítménymetódusként a string változón, amely null-hez van rendelve.

Definiáljon három metódust, amelyek mindegyike metódust Assert hív meg egy sztringtömb minden eleméhez. Olyan metódus túlterhelésének meghívása, 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. A UnitTest1.cs vagy UnitTest1.vb kódablakban cserélje le a kódot a következő kódra:

    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, $"Expected for '{word}': true; Actual: {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, $"Expected for '{word}': false; Actual: {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, $"Expected for '{word ?? "<null>"}': false; Actual: {result}");
            }
        }
    }
    
    Imports Microsoft.VisualStudio.TestTools.UnitTesting
    Imports UtilityLibraries
    
    Namespace StringLibraryTest
        <TestClass>
        Public Class UnitTest1
            <TestMethod>
            Public Sub TestStartsWithUpper()
                ' Tests that we expect to return true.
                Dim words() As String = {"Alphabet", "Zebra", "ABC", "Αθήνα", "Москва"}
                For Each word In words
                    Dim result As Boolean = word.StartsWithUpper()
                    Assert.IsTrue(result,
                           $"Expected for '{word}': true; Actual: {result}")
                Next
            End Sub
    
            <TestMethod>
            Public Sub TestDoesNotStartWithUpper()
                ' Tests that we expect to return false.
                Dim words() As String = {"alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                                   "1234", ".", ";", " "}
                For Each word In words
                    Dim result As Boolean = word.StartsWithUpper()
                    Assert.IsFalse(result,
                           $"Expected for '{word}': false; Actual: {result}")
                Next
            End Sub
    
            <TestMethod>
            Public Sub DirectCallWithNullOrEmpty()
                ' Tests that we expect to return false.
                Dim words() As String = {String.Empty, Nothing}
                For Each word In words
                    Dim result As Boolean = StringLibrary.StartsWithUpper(word)
                    Assert.IsFalse(result,
                           $"Expected for '{If(word Is Nothing, "<null>", word)}': false; Actual: {result}")
                Next
            End Sub
        End Class
    End Namespace
    

    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. A menüsávon válassza Fájl>Mentés másként UnitTest1.cs vagy Fájl>Mentés másként UnitTest1.vblehetőséget. A Fájl mentése párbeszédpanelen kattintson a Mentés gomb melletti nyílra, majd válassza a Mentés kódolássallehetőséget.

    Visual Studio Fájl mentése másként párbeszédpanel

  3. A Mentés megerősítése párbeszédpanelen kattintson az Igen gombra a fájl mentéséhez.

  4. A Speciális mentési beállítások párbeszédpanelen válassza Unicode (UTF-8 aláírással) – Codepage 65001 a Kódolás legördülő listából, és válassza OKlehetőséget.

    Visual Studio speciális mentési beállításai párbeszédpanel

    Ha nem tudja UTF8 kódolású fájlként menteni a forráskódot, előfordulhat, hogy a Visual Studio ASCII-fájlként menti. Ha ez történik, a futtatókörnyezet nem tudja pontosan dekódolni az ASCII-tartományon kívüli UTF8 karaktereket, és a teszteredmények nem helyesek.

  5. A menüsávon válassza a Teszt>Az összes teszt futtatásalehetőséget. Ha a Test Explorer ablak nem nyílik meg, nyissa meg a Test>Test Explorerlehetőséget választva. A három teszt a Sikeres tesztek szakaszban található, míg a Összegzés szakasz jelenti a tesztfuttatás eredményét.

    Tesztböngésző ablaka az átmenő tesztekkel

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 alkalmazáskód megírása után hoztad létre a tesztet, amit érvényesítesz, így nem láttad, hogy a teszt megbukik. 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. Nem kell mentenie a fájlt, mert a Visual Studio automatikusan menti a megnyitott fájlokat, amikor egy megoldás tesztek futtatására készült.

    string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                       "1234", ".", ";", " " };
    
    Dim words() As String = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство",
                       "1234", ".", ";", " " }
    
    
  2. A teszt futtatásához válassza Teszt>Az összes teszt futtatása lehetőséget a menüsávon. A Test Explorer ablak azt jelzi, hogy két teszt sikeres volt, és egy sikertelen volt.

    Tesztkezelő ablak sikertelen tesztekkel

  3. Válassza ki a sikertelen tesztet, TestDoesNotStartWith.

    A Test Explorer ablak a következő állítás által létrehozott üzenetet jeleníti meg: "Assert.IsFalse failed. "Hiba" várható: hamis; tényleges: Igaz." A hiba miatt a tömb "Hiba" utáni sztringjei nem lettek tesztelve.

    az IsFalse állítási hiba esetén a Test Explorer ablak

  4. Távolítsa el az 1. lépésben hozzáadott "Hiba" sztringet. Futtassa újra a tesztet, és a tesztek sikeresek lesznek.

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

Most, hogy a tesztek mindegyike sikeresen lefutott a kódtár hibakeresési buildjének futtatásakor, futtassa a teszteket még egyszer a kódtár kiadási buildje ellen. Bizonyos tényezők, például a fordítóoptimalizálások, néha eltérő viselkedést eredményezhetnek a hibakeresés és a kiadási buildek között.

A kiadási build tesztelése:

  1. A Visual Studio eszköztárán módosítsa a buildkonfigurációt Hibakeresési-ről Kiadási.

    Visual Studio eszköztár a kiadási build kiemelésével

  2. A Megoldáskezelőbenkattintson a jobb gombbal a StringLibrary projektre, majd a helyi menüből válassza a Build lehetőséget a kódtár újrafordításához.

    StringLibrary helyi menü build parancssal

  3. Az egységtesztek futtatásához válassza Teszt>Az összes teszt futtatása lehetőséget a menüsávon. A tesztek sikeresek.

Hibakeresési tesztek

Ha a Visual Studio-t használja IDE-ként, az oktatóanyagban bemutatott eljárást használhatja: .NET-konzolalkalmazás hibakeresése a Visual Studio használatával kód hibakereséséhez az egységtesztelési projekt használatával. Ahelyett, hogy elindítja a ShowCase alkalmazásprojektet, kattintson a jobb gombbal a StringLibraryTests projektre, és válassza Hibakeresési tesztek lehetőséget a helyi menüből.

A Visual Studio a hibakereső csatolásával elindítja a tesztprojektet. A végrehajtás leáll a tesztprojekthez vagy a mögöttes kódtár kódhoz 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 egységteszteltél. Tegye elérhetővé a kódtárat mások számára, ha csomagként közzéteszi azt a NuGetben . 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: