Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
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.
Indítsa el Visual Studio.
Nyissa meg a
ClassLibraryProjectsmegoldást, amelyet a Hozzon létre egy .NET osztálytárat során hozott létre.Adjon hozzá egy "StringLibraryTest" nevű új egységtesztelési projektet a megoldáshoz.
Kattintson a jobb gombbal a megoldásra a Solution Explorer és válassza a Add>Új projekt lehetőséget.
Az Új projekt hozzáadása oldalon írja be mstest a keresőmező mezőbe. Válassza a C# vagy Visual Basic lehetőséget a Nyelv listából, majd válassza All platform lehetőséget a Platform listából.
Válassza a MSTest Test Project sablont, majd válassza a Továbblehetőséget.
Az Új projekt konfigurálása lapon írja be StringLibraryTest a Projekt neve mezőbe. Ezután válassza a Tovább gombot.
A Címadatok lapon válassza a .NET 10 lehetőséget a Framework mezőben, válassza a Microsoft.Testing.Platform lehetőséget a Test futóhoz, majd válassza a Create lehetőséget.
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 sealed class Test1 { [TestMethod] public void TestMethod1() { } } }Imports Microsoft.VisualStudio.TestTools.UnitTesting Namespace StringLibraryTest <TestClass> Public Class Test1 <TestMethod> Sub TestSub() End Sub End Class End NamespaceAz egységtesztsablon által létrehozott forráskód a következőket teszi:
- A Microsoft.VisualStudio.TestTools.UnitTesting elemet tartalmazza a C# nyelvű StringLibraryTest projektfájlban, és Microsoft.VisualStudio.TestTools.UnitTesting importálja a Visual Basic-ben.
- Alkalmazza az TestClassAttribute attribútumot az
Test1osztályra. -
TestMethodAttribute attribútumot alkalmazza a C#-ban a
TestMethod1vagy a Visual Basic-ben aTestSubdefiniálásához.
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.
Indítsa el a Visual Studio Code.
Nyissa meg a
ClassLibraryProjectsmegoldást, amelyet a Hozzon létre egy .NET osztálytárat részben hozott létre.A Solution Explorer területen válassza a New Project lehetőséget, vagy a Parancskatalógusban válassza a .NET: Új projekt lehetőséget.
Válassza az MSTest Test Project elemet, nevezze el "StringLibraryTest"-nek, válassza ki az alapértelmezett könyvtárat, és válassza a Projekt létrehozása lehetőséget.
A projektsablon létrehozza a StringLibraryTest/Test1.cs a következő kóddal:
namespace StringLibraryTest; [TestClass] public class Test1 { [TestMethod] public void TestMethod1() { } }Az egységtesztsablon által létrehozott forráskód a következőket teszi:
-
TestClassAttribute attribútumot a
Test1osztályra alkalmazza. - A TestMethodAttribute attribútumot alkalmazza a
TestMethod1meghatározásához. - Importálja a Microsoft.VisualStudio.TestTools.UnitTesting névteret, amely tartalmazza az egységteszteléshez használt típusokat. A névtér importálása a
global usingirányelv útján történik a GlobalUsings.cs-ben.
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.
-
TestClassAttribute attribútumot a
Nyissa meg a terminált, és keresse meg a StringLibrary és a ShowCase projekteket tartalmazó oktatóanyagok mappát.
Hozzon létre egy új MSTest tesztprojektet:
dotnet new mstest -n StringLibraryTestA projektsablon létrehozza a StringLibraryTest/Test1.cs a következő kóddal:
namespace StringLibraryTest; [TestClass] public class Test1 { [TestMethod] public void TestMethod1() { } }Az egységtesztsablon által létrehozott forráskód a következőket teszi:
- A TestClassAttribute attribútumot a
Test1osztályra alkalmazza. -
TestMethodAttribute attribútumot alkalmaz a
TestMethod1meghatározására. - Importálja a Microsoft.VisualStudio.TestTools.UnitTesting névteret, amely tartalmazza az egységteszteléshez használt típusokat.
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.
- A TestClassAttribute attribútumot a
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 .
A Solution Explorer-ben kattintson a jobb gombbal a Dependencies csomópontjára a StringLibraryTest projektben, és válassza a Add Project Reference lehetőséget a helyi menüben.
A Referenciakezelő párbeszédpanelen válassza a StringLibrary melletti jelölőnégyzetet.
Kattintson az OK gombra.
A Solution Explorer jobb gombbal kattintson a StringLibraryTest projektre, és válassza a Projekthivatkozás hozzáadása lehetőséget.
Válassza a "StringLibrary" lehetőséget.
Lépjen a StringLibraryTest mappába, és adja hozzá a projekthivatkozást:
cd StringLibraryTest dotnet add reference ../StringLibrary/StringLibrary.csproj
Egységtesztelési módszerek hozzáadása és futtatása
Amikor egy egységteszt fut, az TestMethodAttribute attribútummal megjelölt osztályban lévő összes metódus automatikusan végrehajtja az TestClassAttribute attribútumot. 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 metódust egy Assert.Throws tesztmetódusban is használhatja annak jelzésére, hogy milyen típusú kivétel várható. A teszt sikertelen, ha a megadott kivétel nincs dobva.
A StringLibrary.StartsWithUpper metódus tesztelése során több 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 több sztringet 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 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 meghívhatja a StartsWithUpper statikus metódust és átadhat egyetlen String argumentumot. Vagy meghívhatja StartsWithUpper kiterjesztési metódusként egy null-hoz rendelt string változón.
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:
A Test1.cs vagy Test1.vb kódablakban cserélje le a kódot a következő kódra:
using UtilityLibraries; namespace StringLibraryTest { [TestClass] public sealed class Test1 { [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 NamespaceA
TestStartsWithUppermetó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 aTestDoesNotStartWithUppermetódusban a görög kis alfa betűt (U+03B1) és a cirill kis Ghe betűt (U+0433) tartalmazza.A menüsávon válassza a Fájl>mentése Test1.cs másként vagy Fájl>mentése Test1.vb másként lehető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.
A Mentés megerősítése párbeszédpanelen kattintson az Igen gombra a fájl mentéséhez.
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.
Ha nem tudja UTF8 kódolású fájlként menteni a forráskódot, 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 helyesek.
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.
Nyissa meg a StringLibraryTest/Test1.cs elemet, és cserélje le az összes kódot a következő kódra.
using UtilityLibraries; namespace StringLibraryTest { [TestClass] public sealed class Test1 { [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}"); } } } }A
TestStartsWithUppermetó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 aTestDoesNotStartWithUppermetódusban a görög kis alfa betűt (U+03B1) és a cirill kis Ghe betűt (U+0433) tartalmazza.Mentse a módosításokat.
Tesztek készítése és futtatása
A Solution Explorer kattintson a jobb gombbal a megoldásra, és válassza a Build vagy a Parancskatalógusban válassza a .NET: Build lehetőséget.
Válassza a Tesztelés ablakot, válassza a Tesztek futtatása vagy a Parancskatalógusban a Tesztelés: Az összes teszt futtatása lehetőséget.
Nyissa meg a StringLibraryTest/Test1.cs elemet, és cserélje le az összes kódot a következő kódra:
using UtilityLibraries; namespace StringLibraryTest { [TestClass] public sealed class Test1 { [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}"); } } } }A
TestStartsWithUppermetó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 aTestDoesNotStartWithUppermetódusban a görög kis alfa betűt (U+03B1) és a cirill kis Ghe betűt (U+0433) tartalmazza.Mentse a módosításokat, és futtassa a teszteket:
dotnet testA teszteknek át kell menniük.
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.
Módosítsa a
wordstömböt aTestDoesNotStartWithUppermetódusban, hogy tartalmazza a "Hiba" sztringet.string[] words = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " };Dim words() As String = { "alphabet", "Error", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство", "1234", ".", ";", " " }
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.
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.
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 meghibásodás miatt a tömbben a "Hiba" utáni sztringek nem voltak tesztelve.
Futtassa a teszteket:
dotnet testA 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 meghibásodás miatt a tömbben a "Hiba" utáni sztringek nem voltak tesztelve.
Távolítsa el a 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 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ációk, néha eltérő viselkedést eredményezhetnek a hibakeresési és gyártási verziók között.
A kiadási build tesztelése:
Az Visual Studio eszköztáron módosítsa a buildkonfigurációt Debug-ről Release értékre.
A Solution Explorer kattintson a jobb gombbal a StringLibrary projektre, és válassza a Build lehetőséget a helyi menüből a kódtár újrafordításához.
Az egységtesztek futtatásához válassza Teszt>Az összes teszt futtatása lehetőséget a menüsávon. A tesztek sikeresek.
Futtassa a teszteket a Release build-konfigurációjával.
dotnet test StringLibraryTest/StringLibraryTest.csproj --configuration Release
A tesztek sikeresek.
Futtassa a teszteket a Release build-konfigurációjával.
dotnet test --configuration Release
A tesztek sikeresek.
Hibakeresési tesztek
Ha a Visual Studio-t használja fejlesztői környezetként, ugyanezt a folyamatot használhatja, mint amit a Oktatóanyag: Hibakeresés .NET konzolalkalmazásban részben megmutattak, hogy a kódot az egységteszt projekt segítségével hibakeresse. 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.
Visual Studio 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ódhoz hozzáadott bármely töréspontnál.
Ha a Visual Studio Code-ot használja IDE-ként, akkor ugyanazt a folyamatot követheti, amely a .NET konzolalkalmazás hibakeresése részben látható, hogy hibakeresést végezzen a kódban az egységteszt projekt használatával. A ShowCase alkalmazásprojekt indítása helyett nyissa meg a StringLibraryTest/Test1.cs fájlt, és válassza a 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 CtrlShift+P+ a parancskatalógus megnyitásához, és írja be az Újratöltés ablakot.
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
- Egyenes teszt alapjai – Visual Studio
Egyenes tesztelés a .NET
Egyenes tesztelés a .NET
Erőforrások törlése
GitHub 30 nap inaktivitás után automatikusan törli a Codespace-t. Ha további oktatóanyagokat tervez ebben a sorozatban, a Codespace üzembe helyezését elhagyhatja. Ha készen áll a .NET webhelyre a .NET SDK letöltéséhez, törölheti a Codespace-t. A Codespace törléséhez nyisson meg egy böngészőablakot, és menjen a a Codespaces felületére. Az ablakban megjelenik a kódterek listája. Válassza ki a három elemet (...) a learn oktatóanyag kódterének bejegyzésében. Ezután válassza a "Törlés" lehetőséget.
Következő lépések
Ebben az oktatóanyagban egy osztálykönyvtárat egységteszteltél. 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: