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 Visual Studiohasználatával létrehozott
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 a Visual Studiót.
Nyissa meg a
ClassLibraryProjectsmegoldást, amelyet a feladat során egy .NET-osztálykönyvtár létrehozásával hozott létre, a Visual Studiohasználatával.Adjon hozzá egy "StringLibraryTest" nevű új egységtesztelési projektet a megoldáshoz.
Kattintson a jobb gombbal a megoldásra Megoldáskezelő, és válassza a >Új projekt hozzáadásalehetőséget.
Az Új projekt hozzáadása oldalon írja be mstest a keresőmező mezőbe. Válassza C# vagy Visual Basic a Nyelv listából, majd válassza a Minden platform lehetőséget a platformlistában.
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 Következőlehetőséget.
A További információk lapon válassza .NET 8 a Keretrendszer mezőben. Ezután válassza az létrehozása opciót.
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 NamespaceAz egységtesztsablon által létrehozott forráskód a következőket teszi:
- Importálja a Microsoft.VisualStudio.TestTools.UnitTesting névteret, amely az egységteszteléshez használt típusokat tartalmazza. A C# nyelvben a névteret egy
global usingirányelven keresztül importáljuk a GlobalUsings.cs-ben. - Alkalmazza az TestClassAttribute attribútumot az
UnitTest1osztályra. - Alkalmazza a TestMethodAttribute attribútumot a
TestMethod1C#-ben vagy aTestSubVisual Basic-ben való definiálására.
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.
- Importálja a Microsoft.VisualStudio.TestTools.UnitTesting névteret, amely az egységteszteléshez használt típusokat tartalmazza. A C# nyelvben a névteret egy
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.
A Megoldáskezelőbenkattintson a jobb gombbal a StringLibraryTest projekt Függőségek csomópontjára, és válassza a helyi menüben a Projekthivatkozás hozzáadása lehetőséget.
A Reference Manager párbeszédpanelen bontsa ki a Projektek csomópontot, és jelölje ki a StringLibrarymelletti jelölőnégyzetet. Referencia hozzáadásával a
StringLibraryszerelvényhez a fordító megkeresheti a StringLibrary metódusait a StringLibraryTest projekt fordítása során.Válassza OKlehetőséget.
Egységtesztelési módszerek hozzáadása és futtatása
Amikor a Visual Studio egy egységtesztet futtat, végrehajtja az TestMethodAttribute attribútummal megjelölt osztályban az attribútummal TestClassAttribute megjelölt összes metódust. 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 Assert.ThrowsException (vagy Assert.Throws és Assert.ThrowsExactly msTest 3.8 és újabb verziók esetén) metódust is használhatja egy tesztmetódusban, hogy jelezze a várható kivétel típusát. A teszt sikertelen, ha a megadott kivétel nincs dobva.
A metódus tesztelése StringLibrary.StartsWithUpper során sok 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, szeretne számos olyan karakterláncot megadni, amelyek valami mással kezdődnek, mint egy nagybetű. 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 a üres sztringet (String.Empty), egy olyan érvényes sztringet, amelynek nincs karaktere, és amelynek Length 0, valamint egy null sztringet, amely nincs inicializálva. Hívjon StartsWithUpper közvetlenül statikus metódusként, és adjon át egyetlen String argumentumot. Használj StartsWithUpper bővítménymetódusként a string változón, amely null-hez van rendelve.
Definiáljon három metódust, amelyek mindegyike metódust Assert hív meg egy sztringtömb minden eleméhez. Olyan metódus túlterhelésének meghívása, 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 UnitTest1.cs vagy 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, $"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 Fájl>Mentés másként UnitTest1.cs vagy Fájl>Mentés másként UnitTest1.vblehető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, előfordulhat, hogy a Visual Studio ASCII-fájlként menti. 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.
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. 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", ".", ";", " " }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.
Távolítsa el az 1. lépésben 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 a tesztek mindegyike sikeresen lefutott a kódtár hibakeresési buildjének futtatásakor, futtassa a teszteket még egyszer a kódtár kiadási buildje ellen. Bizonyos tényezők, például a fordítóoptimalizálások, néha eltérő viselkedést eredményezhetnek a hibakeresés és a kiadási buildek között.
A kiadási build tesztelése:
A Visual Studio eszköztárán módosítsa a buildkonfigurációt Hibakeresési-ről Kiadási.
A Megoldáskezelőbenkattintson a jobb gombbal a StringLibrary projektre, majd a helyi menüből válassza a Build lehetőséget 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.
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 Studio használatával kód hibakereséséhez az egységtesztelési projekt használatával. 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.
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ódhoz hozzáadott bármely töréspontnál.
További erőforrások
Következő lépések
Ebben az oktatóanyagban egy osztálykönyvtárat egységteszteltél. Tegye elérhetővé a kódtárat 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: