Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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őkattintson a jobb gombbal az UtilityLibraries megoldásra, és válassza >Új projekthozzá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 10-et, majd válassza a Létrehozás lehető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á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.
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 annál a sornál, amely
return Char.IsUpper(s[0])-ként van jelölve 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ánVá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.