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.
Ha engedélyezi az élő egység tesztelését egy Visual Studio-megoldásban, az vizuálisan ábrázolja a teszt lefedettségét és a tesztek állapotát. Az Élő egység tesztelése emellett dinamikusan hajtja végre a teszteket, amikor módosítja a kódot, és azonnal értesíti, ha a módosítások a tesztek sikertelenségét okozzák.
Az élő egységtesztelés a .NET-keretrendszert, a .NET Core-t vagy a .NET 5+-t célzó megoldások tesztelésére használható. Ebben az oktatóanyagban megtanulhatja, hogyan használhatja az élő egységtesztelést egy egyszerű osztálykönyvtár létrehozásával, amely a .NET-et célozza, és létrehoz egy MSTest-projektet, amely a .NET-et célozza a teszteléshez.
A teljes C#-megoldás letölthető a GitHubon található MicrosoftDocs/visualstudio-docs adattárból.
Előfeltételek
Ehhez az oktatóanyaghoz telepítenie kell a Visual Studio Enterprise verziót a .NET asztali fejlesztési munkaterheléssel.
A megoldás és az osztálytár projekt létrehozása
Először hozzon létre egy UtilityLibraries nevű Visual Studio-megoldást, amely egyetlen .NET-osztálytárprojektből, a StringLibrary-ből áll.
A megoldás csak egy tároló egy vagy több projekthez. Üres megoldás létrehozásához nyissa meg a Visual Studiót, és tegye a következőket:
Válassza a Fájl>Új>projekt lehetőséget a Visual Studio menü felső szintjéről.
Írja be megoldás a sablon keresőmezőbe, majd válassza ki az Üres megoldás sablont. Nevezze el a projektet UtilityLibraries.
Fejezze be a megoldás létrehozását.
Most, hogy létrehozta a megoldást, létre fog hozni egy StringLibrary nevű osztálytárat, amely számos kiterjesztési metódust tartalmaz a sztringek használatához.
A Megoldáskezelőkattintson a jobb gombbal az UtilityLibraries megoldásra, és válassza >Új projekthozzáadása lehetőséget.
Írja be osztálytár a sablon keresőmezőbe, és válassza ki a Osztálytár sablont, amely a .NET-et vagy a .NET Standardot célozza. Kattintson a Továbbgombra.
Nevezze el a projektet StringLibrary.
Kattintson a projekt létrehozásához a létrehozása gombra.
Cserélje le a kódszerkesztőben lévő összes meglévő kódot a következő kódra:
using System; namespace UtilityLibraries { public static class StringLibrary { public static bool StartsWithUpper(this string s) { if (String.IsNullOrWhiteSpace(s)) return false; return Char.IsUpper(s[0]); } public static bool StartsWithLower(this string s) { if (String.IsNullOrWhiteSpace(s)) return false; return Char.IsLower(s[0]); } public static bool HasEmbeddedSpaces(this string s) { foreach (var ch in s.Trim()) { if (ch == ' ') return true; } return false; } } }A StringLibrary három statikus metódust tartalmaz:
StartsWithUppervisszaadjatrue, ha egy karakterlánc nagybetűvel kezdődik; ellenkező esetbenfalsead vissza.StartsWithLowertruead vissza, ha egy karakterlánc kisbetűvel kezdődik; egyébkéntfalsead vissza.HasEmbeddedSpacestrue-et ad vissza, ha egy sztring beágyazott szóköz karaktert tartalmaz; ellenkező esetbenfalse-t ad vissza.
Válassza Build>Build Solution lehetőséget a felső szintű Visual Studio menüből. A buildnek sikeresnek kell lennie.
A tesztprojekt létrehozása
A következő lépés az egységtesztelési projekt létrehozása a StringLibrary-kódtár teszteléséhez. Hozza létre az egységteszteket az alábbi lépések végrehajtásával:
A Megoldáskezelőbenkattintson a jobb gombbal az UtilityLibraries megoldásra, és válassza az Új projekt hozzáadása>lehetőséget.
Írja be egységteszt a sablon keresőmezőbe, válassza ki a C# nyelvet, majd válassza ki a .NET-sablonhoz tartozó MSTest Unit Test Project. Kattintson a Továbbgombra.
Jegyzet
A Visual Studio 2019 16.9-es verziójában az MSTest projektsablon neve Unit Test Project.
Nevezze el a projektet StringLibraryTests, majd kattintson a Továbbgombra.
Válassza ki az ajánlott cél keretrendszert vagy a .NET 8-at, majd válassza a Létrehozáslehetőséget.
Jegyzet
Ez az első lépések oktatóanyaga az MSTest tesztelési keretrendszerrel végzett élő egységtesztelést használja. Az xUnit és az NUnit tesztelési keretrendszereket is használhatja.
Az egységtesztelési projekt nem tud automatikusan hozzáférni a tesztelt osztálytárhoz. A teszttárhoz úgy adhat hozzáférést, hogy hozzáad egy hivatkozást az osztálytár projekthez. Ehhez kattintson a jobb gombbal a
StringLibraryTestsprojektre, és válassza a >Projekthivatkozás hozzáadásalehetőséget. A Reference Manager párbeszédpanelen győződjön meg arról, hogy a Megoldás lap ki van jelölve, és válassza ki a StringLibrary projektet az alábbi ábrán látható módon.
Cserélje le a sablon által biztosított kazánlemezegység-tesztkódot a következő kódra:
using System; 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, $"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 ? "<null>" : word)}': " + $"false; Actual: {result}"); } } } }Mentse a projektet az eszköztár Mentés ikonjára kattintva.
Mivel az egységteszt kódja tartalmaz néhány nem ASCII-karaktert, az alábbi párbeszédpanel figyelmezteti, hogy egyes karakterek elvesznek, ha a fájlt az alapértelmezett ASCII formátumban menti.
Válassza a Mentés más kódolással gombot.
kiválasztása
kiválasztásaA Kódolási legördülő lista a Advance Save Options párbeszédpanelen belül válassza a Unicode (UTF-8 aláírás nélkül) – Codepage 65001lehetőséget, ahogy az alábbi ábrán látható.
kiválasztásaÁllítsa össze az egységtesztelési projektet a felső szintű Visual Studio menü Build>Rebuild Solution kiválasztásával.
Létrehozott egy osztálykönyvtárat, valamint néhány egységtesztet is hozzá. Ezzel befejezte az élő egységtesztelés használatához szükséges előtagokat.
Élő egység tesztelésének engedélyezése
Eddig, bár megírta a StringLibrary osztály könyvtárának tesztjeit, még nem hajtotta végre őket. Az élő egységtesztelés automatikusan végrehajtja őket, miután engedélyezte. Ehhez tegye a következőket:
Ha szeretné, válassza ki a StringLibrary kódját tartalmazó kódszerkesztő ablakot. Ez vagy egy C#-projekthez Class1.cs, vagy egy Visual Basic-projekthez Class1.vb. (Ez a lépés lehetővé teszi, hogy vizuálisan megvizsgálja a tesztek eredményét és a kódlefedettség mértékét az élő egység tesztelésének engedélyezése után.)
Válassza Teszt>Élő egység tesztelése> indítása a felső szintű Visual Studio menüből.
Ellenőrizze az élő egység tesztelésének konfigurációját úgy, hogy az adattár gyökérkönyvtára tartalmazza a forrásfájlok elérési útját mind a segédprogramprojekthez, mind a tesztprojekthez. Válassza a(z) Következő, majd a(z) Befejezéslehetőséget.
Az Élő egység tesztelése ablakban válassza ki a tartalmazza az összes tesztet hivatkozást (Másik lehetőségként válassza a Lejátszási lista gomb ikont, majd válassza a StringLibraryTest, amely az alatta lévő összes tesztet kiválasztja. Ezután törölje a lejátszási lista gomb kijelölését a szerkesztési módból való kilépéshez.)
A Visual Studio újraépíti a projektet, és elindítja az élő egységtesztet, amely automatikusan futtatja az összes tesztet.
- A Visual Studio újraépíti a projektet, és elindítja az élő egységtesztet, amely automatikusan futtatja az összes tesztet.
Amikor befejezi a tesztek futtatását, Élő egység tesztelése megjeleníti az összesített eredményeket és az egyes tesztek eredményét. Emellett a kódszerkesztő ablaka grafikusan megjeleníti a tesztkód lefedettségét és a tesztek eredményét is. Ahogy az alábbi ábrán látható, mindhárom teszt sikeresen lefutott. Azt is megmutatja, hogy a teszteink lefedték az StartsWithUpper metódus összes kódútvonalát, és az összes teszt sikeresen végrehajtotta őket (amit a "✓" zöld pipa jelez). Végül azt mutatja, hogy a StringLibrary többi metódusa egyik sem rendelkezik kódlefedettségekkel (amelyet kék vonal jelez, "➖").
A tesztlefedettségről és a teszteredményekről a kódszerkesztő ablakában egy adott kódlefedettségi ikon kiválasztásával részletesebb információkat is kaphat. A részletek vizsgálatához tegye a következőket:
Kattintson a zöld pipára annál a sornál, amely
if (String.IsNullOrWhiteSpace(s))-ként van jelölve aStartsWithUppermetódusban. Ahogy az alábbi ábrán látható, az Élő egység tesztelése azt jelzi, hogy három teszt fedi le ezt a kódsort, és mindegyik sikeresen végrehajtotta.
Kattintson a zöld pipára azon a vonalon, amely
return Char.IsUpper(s[0])-t tartalmaz aStartsWithUppermetódusban. Ahogy az alábbi ábrán látható, az Élő egység tesztelése azt jelzi, hogy csak két teszt fedi le ezt a kódsort, és hogy mindegyik sikeresen végrehajtotta.
Az Élő egység tesztelése által azonosított fő probléma a hiányos kódlefedettség. A következő szakaszban majd te foglalkozol vele.
A tesztlefedettség bővítése
Ebben a szakaszban az egységteszteket a StartsWithLower metódusra fogja kiterjeszteni. Amíg ezt teszi, az élő egység tesztelése dinamikusan folytatja a kód tesztelését.
A kódlefedettség StartsWithLower metódusra való kiterjesztéséhez tegye a következőket:
Adja hozzá a következő
TestStartsWithLowerésTestDoesNotStartWithLowermetódusokat a projekt teszt forráskódfájljához:// Code to add to UnitTest1.cs [TestMethod] public void TestStartsWithLower() { // Tests that we expect to return true. string[] words = { "alphabet", "zebra", "abc", "αυτοκινητοβιομηχανία", "государство" }; foreach (var word in words) { bool result = word.StartsWithLower(); Assert.IsTrue(result, $"Expected for '{word}': true; Actual: {result}"); } } [TestMethod] public void TestDoesNotStartWithLower() { // Tests that we expect to return false. string[] words = { "Alphabet", "Zebra", "ABC", "Αθήνα", "Москва", "1234", ".", ";", " "}; foreach (var word in words) { bool result = word.StartsWithLower(); Assert.IsFalse(result, $"Expected for '{word}': false; Actual: {result}"); } }Módosítsa a
DirectCallWithNullOrEmptymetódust úgy, hogy közvetlenül a hívás után hozzáadja a következő kódot aMicrosoft.VisualStudio.TestTools.UnitTesting.Assert.IsFalsemetódushoz.// Code to add to UnitTest1.cs result = StringLibrary.StartsWithLower(word); Assert.IsFalse(result, $"Expected for '{(word == null ? "<null>" : word)}': " + $"false; Actual: {result}");Az Élő egység tesztelése automatikusan végrehajtja az új és módosított teszteket a forráskód módosításakor. Ahogy az alábbi ábrán látható, az összes teszt sikeres volt, beleértve a hozzáadott kettőt és a módosított teszteket is.
bővítése után
Váltson arra az ablakra, amely a StringLibrary osztály forráskódját tartalmazza. Az élő egység tesztelése most azt mutatja, hogy a kódlefedettség ki van terjesztve a
StartsWithLowermetódusra.
Bizonyos esetekben előfordulhat, hogy az Test Explorer sikeres tesztjei szürkítve jelennek meg. Ez azt jelzi, hogy egy teszt végrehajtása folyamatban van, vagy hogy a teszt nem futott újra, mert nem történt olyan kódmódosítás, amely hatással lenne a tesztre a legutóbbi végrehajtás óta.
Eddig minden tesztünk sikeres volt. A következő szakaszban megvizsgáljuk, hogyan kezelheti a teszthibát.
Teszthiba kezelése
Ebben a szakaszban megtudhatja, hogyan használhatja az élő egységtesztelést a tesztelési hibák azonosítására, hibaelhárítására és elhárítására. Ezt úgy teheti meg, hogy kibővíti a tesztelési lefedettséget a HasEmbeddedSpaces metódusra.
Adja hozzá a következő metódust a tesztfájlhoz:
[TestMethod] public void TestHasEmbeddedSpaces() { // Tests that we expect to return true. string[] phrases = { "one car", "Name\u0009Description", "Line1\nLine2", "Line3\u000ALine4", "Line5\u000BLine6", "Line7\u000CLine8", "Line0009\u000DLine10", "word1\u00A0word2" }; foreach (var phrase in phrases) { bool result = phrase.HasEmbeddedSpaces(); Assert.IsTrue(result, $"Expected for '{phrase}': true; Actual: {result}"); } }A teszt végrehajtásakor az Élő egység tesztelése azt jelzi, hogy a
TestHasEmbeddedSpacesmetódus sikertelen volt, ahogy az alábbi ábrán látható:
Jelölje ki a kódtár kódját megjelenítő ablakot. A Live Unit Testing kiterjesztette a kódlefedettséget a
HasEmbeddedSpacesmetódusra. A teszthibát úgy is bejelenti, hogy a piros „🞩” hozzáadva jelenik meg a sikertelen tesztek által érintett sorokon.Vigye az egeret a
HasEmbeddedSpacesmetódus aláírását tartalmazó sor fölé. Az Élő egység tesztelése egy elemleírást jelenít meg, amely azt jelenti, hogy a metódust egy teszt fedi le, ahogy az alábbi ábrán látható:
Válassza ki a sikertelen TestHasEmbeddedSpaces tesztet. Az élő egység tesztelése néhány lehetőséget kínál, például az összes teszt futtatását és az összes teszt hibakeresését, ahogyan az alábbi ábrán látható:
Válassza a Összes teszt hibakeresése lehetőséget a sikertelen teszt hibakereséséhez.
A Visual Studio hibakeresési módban hajtja végre a tesztet.
A teszt hozzárendeli egy tömb minden sztringét egy
phrasenevű változóhoz, és átadja azt aHasEmbeddedSpacesmetódusnak. A program végrehajtása szünetel, és meghívja a hibakeresőt az első alkalommal, amikor az ellenőrző kifejezésfalse. AMicrosoft.VisualStudio.TestTools.UnitTesting.Assert.IsTruemetódus hívása során fellépő váratlan értékből eredő kivételdialógus az alábbi ábrán látható.
Emellett a Visual Studio által biztosított összes hibakeresési eszköz elérhető a sikertelen teszt hibáinak elhárításához, ahogyan az alábbi ábrán látható:
Az Automatikus ablakban vegye figyelembe, hogy a
phraseváltozó értéke "Name\tDescription", amely a tömb második eleme. A tesztelési módszer azt várja, hogy amikor ez a sztring átadásra kerül,HasEmbeddedSpacesvisszaadjatrue-et; ehelyettfalsekerül visszaadásra. Nyilvánvaló, hogy nem ismeri fel a "\t" karaktert, a tabulátorjelet beágyazott szóközként.Válassza Hibakeresés>Folytatás, nyomja le F5, vagy kattintson az eszköztár Folytatás gombjára a tesztprogram végrehajtásának folytatásához. Mivel nem kezelt kivétel történt, a teszt leáll. Ez elegendő információt nyújt a hiba előzetes vizsgálatához. Vagy
TestHasEmbeddedSpaces(a tesztelési rutin) helytelen feltételezést tett, vagyHasEmbeddedSpacesnem ismeri fel megfelelően az összes beágyazott szóközt.A probléma diagnosztizálásához és javításához kezdje a
StringLibrary.HasEmbeddedSpacesmetódussal. Tekintse meg az összehasonlítást aHasEmbeddedSpacesmetódusban. A beágyazott területet U+0020-nak tekinti. A Unicode Standard azonban számos más szóközkaraktert is tartalmaz. Ez arra utal, hogy a könyvtárkód helytelenül vizsgált egy szóköz karakter meglétét.Cserélje le az egyenlőségi összehasonlítást egy hívásra a System.Char.IsWhiteSpace metódushoz.
if (Char.IsWhiteSpace(ch))Az élő egység tesztelése automatikusan újrafuttatja a sikertelen tesztelési módszert.
Az élő egységtesztelés megjeleníti a frissített eredményeket, amelyek a kódszerkesztő ablakban is megjelennek.