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

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 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 .NET-osztálytár létrehozása a Visual Studióval létrehozott megoldást.

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

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

    2. Az Új projekt hozzáadása lapon írja be az mstest kifejezést a keresőmezőbe. Válassza a C# vagy a Visual Basic lehetőséget a Nyelv listából, majd válassza a Platformlista Minden platform elemét.

    3. Válassza az MSTest Test Project sablont, majd a Tovább gombot.

    4. Az új projekt konfigurálása lapon írja be a StringLibraryTest kifejezést a Projekt neve mezőbe. Ezután válassza a Tovább gombot.

    5. A További információk lapon válassza a .NET 8 (előzetes verzió) lehetőséget a Keretrendszer mezőben. Ezután válassza a Létrehozás elemet.

  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 tartalmazza az egységteszteléshez használt típusokat. A C#-ban a névtér importálása a global using GlobalUsings.cs egyik irányelvén keresztül történik.
    • Az attribútumot az TestClassAttribute osztályra UnitTest1 alkalmazza.
    • Az attribútumot a TestMethodAttribute C#-ban vagy TestSub a Visual Basicben definiáljaTestMethod1.

    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őben kattintson a jobb gombbal a StringLibraryTest projekt Függőségek csomópontjára, és válassza a Helyi menü Projekthivatkozás hozzáadása parancsát.

  2. A Referenciakezelő párbeszédpanelen bontsa ki a Projektek csomópontot, és jelölje ki a StringLibrary melletti jelölőnégyzetet. A szerelvényre StringLibrary mutató hivatkozás hozzáadásával a fordító megkeresi a StringLibrary metódusokat a StringLibraryTest projekt összeállítása közben.

  3. Válassza az OK lehetőséget.

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

Amikor a Visual Studio egy egységtesztet futtat, végrehajtja azokat a metódusokat, amelyek az TestMethodAttribute attribútummal TestClassAttribute megjelölt osztályban vannak megjelölve. 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 osztály tagjait Assert 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. Assert Az osztály leggyakrabban nevezett módszereinek némelyike az alábbi táblázatban látható:

Helyességi módszerek Függvény
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 van-e false. 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 metódust egy Assert.ThrowsException tesztmetódusban is használhatja annak jelzésére, hogy milyen típusú kivétel várható. A teszt meghiúsul, ha a megadott kivétel nincs kiadva.

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

Mivel a kódtár metódusa sztringeket kezel, azt is meg kell győződnie arról, hogy sikeresen kezeli az üres sztringet (), egy érvényes sztringet, amelynek nincs karaktere, és amelynek Length értéke 0, valamint egy nem inicializált sztringetnull.String.Empty Közvetlenül statikus metódusként hívhat, StartsWithUpper és egyetlen String argumentumot adhat át. Vagy meghívhat StartsWithUpper bővítménymetódusként egy hozzárendelt string változón null.

Három metódust fog definiálni, amelyek mindegyike metódust Assert 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. A UnitTest1.cs vagy a 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,
                           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));
                }
            }
        }
    }
    
    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 módszer nagybetűs karaktereinek TestStartsWithUpper vizsgálata magában foglalja a görög alfa betűt (U+0391) és az EM cirill betűt (U+041C). A módszer kisbetűs karaktereinek TestDoesNotStartWithUpper vizsgálata magában foglalja a görög kis alfa betűt (U+03B1) és a cirill kis Ghe betűt (U+0433).

  2. A menüsávon válassza a File>Save UnitTest1.cs As vagy a File>Save UnitTest1.vb As lehetőséget. A Fájl mentése másként párbeszédpanelen kattintson a Mentés gomb melletti nyílra, és válassza a Mentés kódolással lehetőséget.

    Visual Studio Save File As dialog

  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 a Unicode (UTF-8 aláírással) – Codepage 65001 elemet a Kódolás legördülő listából, és válassza az OK gombot.

    Visual Studio Advanced Save Options dialog

    Ha nem tudja UTF8 kódolású fájlként menteni a forráskódot, a Visual Studio ASCII-fájlként mentheti. 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 lesznek helyesek.

  5. A menüsávon válassza az Összes teszt futtatása teszt>lehetőséget. Ha a Test Explorer ablak nem nyílik meg, nyissa meg a Test>Test Explorer lehetőséget választva. A három teszt az Átment tesztek szakaszban található, az Összegzés szakasz pedig a tesztfuttatás eredményét jelenti.

    Test Explorer window with passing tests

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 metódusban úgy TestDoesNotStartWithUpper , hogy tartalmazza a "Error" 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 az Összes teszt futtatása parancsot> a menüsávon. A Test Explorer ablak azt jelzi, hogy két teszt sikeres volt, és egy sikertelen volt.

    Test Explorer window with failing tests

  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. IsFalse failed. "Hiba" várható: hamis; tényleges: Igaz". A hiba miatt a "Hiba" tesztelése után a tömbben nem található sztring.

    Test Explorer window showing the IsFalse assertion failure

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

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 a fordítóoptimalizálások, néha eltérő viselkedést eredményezhetnek a Hibakeresés és a Kiadás buildek között.

A Kiadás build tesztelése:

  1. A Visual Studio eszköztárán módosítsa a buildkonfigurációt hibakeresésről kiadásra.

    Visual Studio toolbar with release build highlighted

  2. A Megoldáskezelőben kattintson a jobb gombbal a StringLibrary projektre, és válassza a Helyi menü Build parancsát a kódtár újrafordításához.

    StringLibrary context menu with build command

  3. Az egységtesztek futtatásához válassza az Összes teszt futtatása parancsot> 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 Studióval kód hibakereséséhez az egységtesztelési projekt használatával. A ShowCase alkalmazásprojekt indítása helyett kattintson a jobb gombbal a StringLibraryTests projektre, és válassza a helyi menüBen a Tesztek hibakeresése lehetőséget.

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ódjához hozzáadott bármely töréspontnál.

További források

Következő lépések

Ebben az oktatóanyagban egy osztálytárat tesztelt. A kódtárat elérhetővé teheti 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:

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 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 .NET-osztálytár létrehozása a Visual Studióval létrehozott megoldást.

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

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

    2. Az Új projekt hozzáadása lapon írja be az mstest kifejezést a keresőmezőbe. Válassza a C# vagy a Visual Basic lehetőséget a Nyelv listából, majd válassza a Platformlista Minden platform elemét.

    3. Válassza az MSTest Test Project sablont, majd a Tovább gombot.

    4. Az új projekt konfigurálása lapon írja be a StringLibraryTest kifejezést a Projekt neve mezőbe. Ezután válassza a Tovább gombot.

    5. A További információ lapon válassza a .NET 7 (Standard-term support) lehetőséget a Keretrendszer mezőben. Ezután válassza a Létrehozás elemet.

  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.

    using Microsoft.VisualStudio.TestTools.UnitTesting;
    
    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:

    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őben kattintson a jobb gombbal a StringLibraryTest projekt Függőségek csomópontjára, és válassza a Helyi menü Projekthivatkozás hozzáadása parancsát.

  2. A Referenciakezelő párbeszédpanelen bontsa ki a Projektek csomópontot, és jelölje ki a StringLibrary melletti jelölőnégyzetet. A szerelvényre StringLibrary mutató hivatkozás hozzáadásával a fordító megkeresi a StringLibrary metódusokat a StringLibraryTest projekt összeállítása közben.

  3. Válassza az OK lehetőséget.

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

Amikor a Visual Studio egy egységtesztet futtat, végrehajtja azokat a metódusokat, amelyek az TestMethodAttribute attribútummal TestClassAttribute megjelölt osztályban vannak megjelölve. 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 osztály tagjait Assert 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. Assert Az osztály leggyakrabban nevezett módszereinek némelyike az alábbi táblázatban látható:

Helyességi módszerek Függvény
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 van-e false. 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 metódust egy Assert.ThrowsException tesztmetódusban is használhatja annak jelzésére, hogy milyen típusú kivétel várható. A teszt meghiúsul, ha a megadott kivétel nincs kiadva.

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

Mivel a kódtár metódusa sztringeket kezel, azt is meg kell győződnie arról, hogy sikeresen kezeli az üres sztringet (), egy érvényes sztringet, amelynek nincs karaktere, és amelynek Length értéke 0, valamint egy nem inicializált sztringetnull.String.Empty Közvetlenül statikus metódusként hívhat, StartsWithUpper és egyetlen String argumentumot adhat át. Vagy meghívhat StartsWithUpper bővítménymetódusként egy hozzárendelt string változón null.

Három metódust fog definiálni, amelyek mindegyike metódust Assert 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. A UnitTest1.cs vagy a UnitTest1.vb kódablakban cserélje le a 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));
                }
            }
        }
    }
    
    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 módszer nagybetűs karaktereinek TestStartsWithUpper vizsgálata magában foglalja a görög alfa betűt (U+0391) és az EM cirill betűt (U+041C). A módszer kisbetűs karaktereinek TestDoesNotStartWithUpper vizsgálata magában foglalja a görög kis alfa betűt (U+03B1) és a cirill kis Ghe betűt (U+0433).

  2. A menüsávon válassza a File>Save UnitTest1.cs As vagy a File>Save UnitTest1.vb As lehetőséget. A Fájl mentése másként párbeszédpanelen kattintson a Mentés gomb melletti nyílra, és válassza a Mentés kódolással lehetőséget.

    Visual Studio Save File As dialog

  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 a Unicode (UTF-8 aláírással) – Codepage 65001 elemet a Kódolás legördülő listából, és válassza az OK gombot.

    Visual Studio Advanced Save Options dialog

    Ha nem tudja UTF8 kódolású fájlként menteni a forráskódot, a Visual Studio ASCII-fájlként mentheti. 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 lesznek helyesek.

  5. A menüsávon válassza az Összes teszt futtatása teszt>lehetőséget. Ha a Test Explorer ablak nem nyílik meg, nyissa meg a Test>Test Explorer lehetőséget választva. A három teszt az Átment tesztek szakaszban található, az Összegzés szakasz pedig a tesztfuttatás eredményét jelenti.

    Test Explorer window with passing tests

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 metódusban úgy TestDoesNotStartWithUpper , hogy tartalmazza a "Error" 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 az Összes teszt futtatása parancsot> a menüsávon. A Test Explorer ablak azt jelzi, hogy két teszt sikeres volt, és egy sikertelen volt.

    Test Explorer window with failing tests

  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. IsFalse failed. "Hiba" várható: hamis; tényleges: Igaz". A hiba miatt a "Hiba" tesztelése után a tömbben nem található sztring.

    Test Explorer window showing the IsFalse assertion failure

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

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 a fordítóoptimalizálások, néha eltérő viselkedést eredményezhetnek a Hibakeresés és a Kiadás buildek között.

A Kiadás build tesztelése:

  1. A Visual Studio eszköztárán módosítsa a buildkonfigurációt hibakeresésről kiadásra.

    Visual Studio toolbar with release build highlighted

  2. A Megoldáskezelőben kattintson a jobb gombbal a StringLibrary projektre, és válassza a Helyi menü Build parancsát a kódtár újrafordításához.

    StringLibrary context menu with build command

  3. Az egységtesztek futtatásához válassza az Összes teszt futtatása parancsot> 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 Studióval kód hibakereséséhez az egységtesztelési projekt használatával. A ShowCase alkalmazásprojekt indítása helyett kattintson a jobb gombbal a StringLibraryTests projektre, és válassza a helyi menüBen a Tesztek hibakeresése lehetőséget.

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ódjához hozzáadott bármely töréspontnál.

További források

Következő lépések

Ebben az oktatóanyagban egy osztálytárat tesztelt. A kódtárat elérhetővé teheti 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:

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 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 .NET-osztálytár létrehozása a Visual Studióval létrehozott megoldást.

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

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

    2. Az Új projekt hozzáadása lapon írja be az mstest kifejezést a keresőmezőbe. Válassza a C# vagy a Visual Basic lehetőséget a Nyelv listából, majd válassza a Platformlista Minden platform elemét.

    3. Válassza az MSTest Test Project sablont, majd a Tovább gombot.

    4. Az új projekt konfigurálása lapon írja be a StringLibraryTest kifejezést a Projekt neve mezőbe. Ezután válassza a Tovább gombot.

    5. A További információ lapon válassza a .NET 6 (hosszú távú támogatás) lehetőséget a Keretrendszer mezőben. Ezután válassza a Létrehozás elemet.

  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.

    using Microsoft.VisualStudio.TestTools.UnitTesting;
    
    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:

    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őben kattintson a jobb gombbal a StringLibraryTest projekt Függőségek csomópontjára, és válassza a Helyi menü Projekthivatkozás hozzáadása parancsát.

  2. A Referenciakezelő párbeszédpanelen bontsa ki a Projektek csomópontot, és jelölje ki a StringLibrary melletti jelölőnégyzetet. A szerelvényre StringLibrary mutató hivatkozás hozzáadásával a fordító megkeresi a StringLibrary metódusokat a StringLibraryTest projekt összeállítása közben.

  3. Válassza az OK lehetőséget.

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

Amikor a Visual Studio egy egységtesztet futtat, végrehajtja azokat a metódusokat, amelyek az TestMethodAttribute attribútummal TestClassAttribute megjelölt osztályban vannak megjelölve. 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 osztály tagjait Assert 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. Assert Az osztály leggyakrabban nevezett módszereinek némelyike az alábbi táblázatban látható:

Helyességi módszerek Függvény
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 van-e false. 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 metódust egy Assert.ThrowsException tesztmetódusban is használhatja annak jelzésére, hogy milyen típusú kivétel várható. A teszt meghiúsul, ha a megadott kivétel nincs kiadva.

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

Mivel a kódtár metódusa sztringeket kezel, azt is meg kell győződnie arról, hogy sikeresen kezeli az üres sztringet (), egy érvényes sztringet, amelynek nincs karaktere, és amelynek Length értéke 0, valamint egy nem inicializált sztringetnull.String.Empty Közvetlenül statikus metódusként hívhat, StartsWithUpper és egyetlen String argumentumot adhat át. Vagy meghívhat StartsWithUpper bővítménymetódusként egy hozzárendelt string változón null.

Három metódust fog definiálni, amelyek mindegyike metódust Assert 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. A UnitTest1.cs vagy a UnitTest1.vb kódablakban cserélje le a 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));
                }
            }
        }
    }
    
    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 módszer nagybetűs karaktereinek TestStartsWithUpper vizsgálata magában foglalja a görög alfa betűt (U+0391) és az EM cirill betűt (U+041C). A módszer kisbetűs karaktereinek TestDoesNotStartWithUpper vizsgálata magában foglalja a görög kis alfa betűt (U+03B1) és a cirill kis Ghe betűt (U+0433).

  2. A menüsávon válassza a File>Save UnitTest1.cs As vagy a File>Save UnitTest1.vb As lehetőséget. A Fájl mentése másként párbeszédpanelen kattintson a Mentés gomb melletti nyílra, és válassza a Mentés kódolással lehetőséget.

    Visual Studio Save File As dialog

  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 a Unicode (UTF-8 aláírással) – Codepage 65001 elemet a Kódolás legördülő listából, és válassza az OK gombot.

    Visual Studio Advanced Save Options dialog

    Ha nem tudja UTF8 kódolású fájlként menteni a forráskódot, a Visual Studio ASCII-fájlként mentheti. 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 lesznek helyesek.

  5. A menüsávon válassza az Összes teszt futtatása teszt>lehetőséget. Ha a Test Explorer ablak nem nyílik meg, nyissa meg a Test>Test Explorer lehetőséget választva. A három teszt az Átment tesztek szakaszban található, az Összegzés szakasz pedig a tesztfuttatás eredményét jelenti.

    Test Explorer window with passing tests

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 metódusban úgy TestDoesNotStartWithUpper , hogy tartalmazza a "Error" 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 az Összes teszt futtatása parancsot> a menüsávon. A Test Explorer ablak azt jelzi, hogy két teszt sikeres volt, és egy sikertelen volt.

    Test Explorer window with failing tests

  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. IsFalse failed. "Hiba" várható: hamis; tényleges: Igaz". A hiba miatt a "Hiba" tesztelése után a tömbben nem található sztring.

    Test Explorer window showing the IsFalse assertion failure

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

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 a fordítóoptimalizálások, néha eltérő viselkedést eredményezhetnek a Hibakeresés és a Kiadás buildek között.

A Kiadás build tesztelése:

  1. A Visual Studio eszköztárán módosítsa a buildkonfigurációt hibakeresésről kiadásra.

    Visual Studio toolbar with release build highlighted

  2. A Megoldáskezelőben kattintson a jobb gombbal a StringLibrary projektre, és válassza a Helyi menü Build parancsát a kódtár újrafordításához.

    StringLibrary context menu with build command

  3. Az egységtesztek futtatásához válassza az Összes teszt futtatása parancsot> 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 Studióval kód hibakereséséhez az egységtesztelési projekt használatával. A ShowCase alkalmazásprojekt indítása helyett kattintson a jobb gombbal a StringLibraryTests projektre, és válassza a helyi menüBen a Tesztek hibakeresése lehetőséget.

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ódjához hozzáadott bármely töréspontnál.

További források

Következő lépések

Ebben az oktatóanyagban egy osztálytárat tesztelt. A kódtárat elérhetővé teheti 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: