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. Az 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 .NET-osztálytár létrehozása a Visual Studio Code használatával létrehozott megoldást.

  3. Hozzon létre egy "StringLibraryTest" nevű egységtesztelési projektet.

    dotnet new mstest -o StringLibraryTest
    

    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:

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

  4. Adja hozzá a tesztprojektet a megoldáshoz.

    dotnet sln add StringLibraryTest/StringLibraryTest.csproj
    

Projekthivatkozás hozzáadása

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

  1. Futtassa az alábbi parancsot:

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

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 az TestMethodAttribute attribútummal megjelölt osztály attribútumával TestClassAttribute van 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 (String.Empty) és egy sztringet null . Az üres sztring olyan, amelynek nincs karaktere, és amelynek Length értéke 0. A null sztring nem inicializálódott. 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. Nyissa meg a StringLibraryTest/UnitTest1.cs fájlt, é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 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. Mentse a módosításokat.

  3. Futtassa a teszteket:

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    A terminálkimenet azt mutatja, hogy az összes teszt sikeres volt.

    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)
    

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.

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

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    A terminálkimenet azt mutatja, hogy egy teszt meghiúsul, és hibaüzenetet ad a sikertelen teszthez: "Assert.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.

    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. 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.

  1. Futtassa a teszteket a kiadás buildkonfigurációjával:

    dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
    

    A tesztek sikeresek.

Hibakeresési tesztek

Ha a Visual Studio Code-ot használja ide-ként, ugyanazt a folyamatot használhatja, amelyet egy .NET-konzolalkalmazás hibakeresésében láthat a Visual Studio Code használatával a kód hibakereséséhez az egységtesztelési projekt használatával. A ShowCase alkalmazásprojekt indítása helyett nyissa meg a StringLibraryTest/UnitTest1.cs fájlt, és válassza a 7. és a 8. sor közötti Összes teszt hibakeresése lehetőséget. Ha nem találja, nyomja le a Ctrl Shift+P billentyűkombinációt+ a parancskatalógus megnyitásához, és írja be az Újratöltés ablakot.

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 források

További 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:

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:

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. Az 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 .NET-osztálytár létrehozása a Visual Studio Code használatával létrehozott megoldást.

  3. Hozzon létre egy "StringLibraryTest" nevű egységtesztelési projektet.

    dotnet new mstest -o StringLibraryTest
    

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

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

    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 meghívásakor.

  4. Adja hozzá a tesztprojektet a megoldáshoz.

    dotnet sln add StringLibraryTest/StringLibraryTest.csproj
    

Projekthivatkozás hozzáadása

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

  1. Futtassa az alábbi parancsot:

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

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 az TestMethodAttribute attribútummal megjelölt osztály attribútumával TestClassAttribute van 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 (String.Empty) és egy sztringet null . Az üres sztring olyan, amelynek nincs karaktere, és amelynek Length értéke 0. A null sztring nem inicializálódott. 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. Nyissa meg a StringLibraryTest/UnitTest1.cs fájlt, é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 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. Mentse a módosításokat.

  3. Futtassa a teszteket:

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    A terminálkimenet azt mutatja, hogy az összes teszt sikeres volt.

    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)
    

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.

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

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    A terminálkimenet azt mutatja, hogy egy teszt meghiúsul, és hibaüzenetet ad a sikertelen teszthez: "Assert.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.

    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. 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.

  1. Futtassa a teszteket a kiadás buildkonfigurációjával:

    dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
    

    A tesztek sikeresek.

Hibakeresési tesztek

Ha a Visual Studio Code-ot használja ide-ként, ugyanazt a folyamatot használhatja, amelyet egy .NET-konzolalkalmazás hibakeresésében láthat a Visual Studio Code használatával a kód hibakereséséhez az egységtesztelési projekt használatával. A ShowCase alkalmazásprojekt indítása helyett nyissa meg a StringLibraryTest/UnitTest1.cs fájlt, és válassza a 7. és a 8. sor közötti Összes teszt hibakeresése lehetőséget. Ha nem találja, nyomja le a Ctrl Shift+P billentyűkombinációt+ a parancskatalógus megnyitásához, és írja be az Újratöltés ablakot.

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 források

További 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 oktatóanyagban használt tesztelési keretrendszer az MSTest. Az 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 .NET-osztálytár létrehozása a Visual Studio Code használatával létrehozott megoldást.

  3. Hozzon létre egy "StringLibraryTest" nevű egységtesztelési projektet.

    dotnet new mstest -f net6.0 -o StringLibraryTest
    

    A -f net6.0 parancs verzióra módosítja az alapértelmezett cél keretrendszert net6.0 .

    A -o vagy --output parancs megadja a létrehozott kimenet elhelyezésének helyét.

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

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

    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 meghívásakor.

  4. Adja hozzá a tesztprojektet a megoldáshoz.

    dotnet sln add StringLibraryTest/StringLibraryTest.csproj
    

Projekthivatkozás hozzáadása

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

  1. Futtassa az alábbi parancsot:

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

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 az TestMethodAttribute attribútummal megjelölt osztály attribútumával TestClassAttribute van 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 (String.Empty) és egy sztringet null . Az üres sztring olyan, amelynek nincs karaktere, és amelynek Length értéke 0. A null sztring nem inicializálódott. 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. Nyissa meg a StringLibraryTest/UnitTest1.cs fájlt, é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 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. Mentse a módosításokat.

  3. Futtassa a teszteket:

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    A terminálkimenet azt mutatja, hogy az összes teszt sikeres volt.

    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)
    

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.

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

    dotnet test StringLibraryTest/StringLibraryTest.csproj
    

    A terminálkimenet azt mutatja, hogy egy teszt meghiúsul, és hibaüzenetet ad a sikertelen teszthez: "Assert.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.

    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. 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.

  1. Futtassa a teszteket a kiadás buildkonfigurációjával:

    dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
    

    A tesztek sikeresek.

Hibakeresési tesztek

Ha a Visual Studio Code-ot használja ide-ként, ugyanazt a folyamatot használhatja, amelyet egy .NET-konzolalkalmazás hibakeresésében láthat a Visual Studio Code használatával a kód hibakereséséhez az egységtesztelési projekt használatával. A ShowCase alkalmazásprojekt indítása helyett nyissa meg a StringLibraryTest/UnitTest1.cs fájlt, és válassza a 7. és a 8. sor közötti Összes teszt hibakeresése lehetőséget. Ha nem találja, nyomja le a Ctrl Shift+P billentyűkombinációt+ a parancskatalógus megnyitásához, és írja be az Újratöltés ablakot.

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 források

További 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: