EGYSÉGTESZTELÉS az Asp.Netben: Teljes oktatóanyag

⚡ Okos összefoglaló

Egy ASP.NET alkalmazás egységtesztelése a Visual Studio-ban egy egységteszt projekttel kezdődik, amely egy hivatkozást csatol a célprojekthez, hozzáadja az MSTest [TestClass] és [TestMethod] attribútumokat, majd meghívja az Assert metódusokat annak bizonyítására, hogy az osztályok a terveknek megfelelően viselkednek.

  • 🧪 Tesztprojekt: Adjon hozzá egy Unit Test Projectet az ASP.NET megoldáshoz, és hivatkozzon a ellenőrizni kívánt célprojektre.
  • 🏷️ Tulajdonságok: Jelöld meg az osztályt [TestClass]-szal, és mindegyik tesztet [TestMethod]-dal, hogy az MSTest felfedezhesse őket.
  • Állítások: Az Assert.AreEqual, Assert.IsTrue és hasonló hívások használatával deklarálhatjuk az egyes tesztek várható eredményét.
  • ▶ ️ Tesztek futtatása: Teszt végrehajtása menü Az összes teszt futtatása a Visual Studion belül, és a Tesztböngésző vizsgálata a sikeres és sikertelen eredmények szempontjából.
  • 🇧🇷 Keretrendszer választása: Az MSTest, az NUnit és az xUnit is működik a dotnet testtel; az MSTest alapértelmezés szerint érkezik, az xUnit az ASP.NET Core esetében az előnyben részesített.
  • 🇧🇷 Legjobb gyakorlat: Izoláld az egységet, kövesd az Arrange Act Assert utasítást, és tartsd a teljes csomagot gyorson, hogy minden commitnál fusson.

Egységtesztelés ASP.NET-ben

A tesztelés minden programozási nyelv alapvető eleme. Tesztelés ASP.NET alkalmazásokhoz a Visual Studio segítségével lehetséges.

A Visual Studio tesztkód létrehozására szolgál. Emellett ASP.NET alkalmazások tesztkódjának futtatására is használható. Ily módon egyszerűvé válik az ASP.NET alkalmazások hibáinak ellenőrzése. A Visual Studio tesztelési modulja egy beépített funkcióval rendelkezik. Azonnal elvégezhető egy teszt egy ASP.NET projekthez.

Bevezetés az ASP.NET tesztelésébe

Az ASP.NET projektek tesztelésének első szintje az egység szintű tesztelés. Ez a teszt egy alkalmazás működését vizsgálja. A tesztelés célja annak biztosítása, hogy az alkalmazás a várt módon viselkedjen. Az ASP.NET-ben az első feladat egy tesztprojekt létrehozása a Visual Studio-ban. A tesztprojekt tartalmazza az alkalmazás teszteléséhez szükséges kódot.

Vegyük figyelembe az alábbi weboldalt. Az oldalon a következő üzenet található: „Guru99 – ASP.NET” hibaüzenet jelenik meg. Hogyan ellenőrizhetjük, hogy a megfelelő üzenet jelenik-e meg egy ASP.NET projekt futtatásakor? Ezt úgy tehetjük meg, hogy egy tesztprojektet adunk az ASP.NET megoldáshoz (amelyet webes alkalmazások fejlesztésére használnak). Ez a tesztprojekt biztosítja, hogy a megfelelő üzenet jelenjen meg a felhasználónak.

Bevezetés az ASP.NET tesztelésébe

Nézzük meg most részletesebben, hogyan tudunk teszteléssel foglalkozni ASP.NET-ben.

NET Unit Testing Project létrehozása

Mielőtt tesztprojektet hoznánk létre, végre kell hajtanunk az alábbi magas szintű lépéseket.

  1. Használja a korábbi szakaszokban használt „DemoAplikációnkat”. Ez lesz az alkalmazásunk, amelyet tesztelnünk kell.
  2. Hozzáadunk egy új osztályt a DemoApplication-hoz. Ez az osztály egy ' nevű karakterláncot fog tartalmazni.Guru99 – ASP.NET.' Ezt a karakterláncot a tesztelési projektünkben fogjuk tesztelni.
  3. Végül létrehozunk egy tesztelési projektet. Ezt az ASP.NET alkalmazás tesztelésére használjuk.

Kövessük tehát a fenti magas szintű lépéseket, és nézzük meg, hogyan valósíthatjuk meg a tesztelést.

Step 1) Győződjön meg arról, hogy a DemoApplication meg van nyitva a Visual Studióban.

Step 2) Most adjunk hozzá egy új osztályt a DemoApplication-hoz. Ez az osztály egy ' nevű karakterláncot fog tartalmazni.Guru99 – ASP.NET.' Ezt a karakterláncot a tesztelési projektünkben fogjuk tesztelni.

Kövesse az alábbi lépést új osztály hozzáadásához.

NET Unit Testing Project létrehozása

  1. A Visual Studio programban kattintson a jobb gombbal a „DemoApplication” elemre a Solution Explorerben.
  2. Válassza a Hozzáadás->Osztály lehetőséget a helyi menüből.

Step 3) Ebben a lépésben a

NET Unit Testing Project létrehozása

  1. Adjon nevet „Tutorial.cs” az új osztálynak.
  2. Kattintson a 'Hozzáadás' gombra, hogy hozzáadja a fájlt a DemoApplication-hez.

Most egy új osztály került hozzáadásra a „DemoApplication” fájlhoz.

Step 4) Nyissa meg az új Tutorial.cs fájlt a „DemoApplication” mappából. Adja hozzá a következő karakterláncot: „Guru99 – ASP.NET.”

A fájl megnyitásához kattintson duplán a Tutorial.cs fájlra a Solution Explorerben.

NET Unit Testing Project létrehozása

A fájlnak már lesz valami alapértelmezett kódja. Ne törődj ezzel a kóddal, csak add hozzá az alábbi kódsort.

NET Unit Testing Project létrehozása

namespace DemoApplication
{
  public class Tutorial
  {
     public String Name;
     public Tutorial()
     {
        Name = "Guru99 - ASP.Net";
     }
  }
}

Code Magyarázat:-

  1. A Name változó karakterlánc típusú.
  2. Végül a Tutorial osztály konstruktorában adjuk meg a Name változó értékét. Az érték a következőhöz lesz rendelve: „Guru99 – ASP.NET”

Step 5) Most menj a demo.aspx fájlba, és add hozzá a következő kódsorokat a szöveg megjelenítéséhez: „Guru99 – ASP.NET.”

NET Unit Testing Project létrehozása

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
    <body>
    <form id="form1" runat="server">
    <div>
        <% DemoApplication.Tutorial tp=new DemoApplication.Tutorial();%>
        <%=tp.Name%>
    </div>
    </form>
    </body>
</html>

Code Magyarázat:-

  1. Az első sor létrehoz egy 'Tutorial' osztályú objektumot. Ez az első lépés az osztályokkal és objektumokkal való munka során. Az objektumnak adott név 'tp'.
  2. Végül meghívjuk a 'tutorial.cs'-t a demo.aspx fájlból. Megjeleníti a Név változó értékét.

Amikor a fenti programot a Visual Studio-ban futtatja, a következő kimenetet kapja.

Kimenet:-

NET Unit Testing Project létrehozása

A kimeneten a következő üzenetet látod: „Guru99 – ASP.NET” üzenet jelenik meg.

Step 6) Most adjuk hozzá a tesztprojektünket a demó alkalmazáshoz. Ezt a Visual Studio segítségével tehetjük meg.

NET Unit Testing Project létrehozása

  1. Kattintson a jobb gombbal a Megoldás – DemoApplication elemre.
  2. A helyi menüben válassza az „Új projekt” lehetőséget.

Step 7) A lépés magában foglalja a Unit Test projekt hozzáadását a bemutató alkalmazáshoz.

NET Unit Testing Project létrehozása

  1. A bal oldali panelen kattintson az elemtípusra, mint "Teszt".
  2. A párbeszédpanel középső részén megjelenő listából válassza ki a „Unit Test Project” elemet.
  3. Adjon nevet a tesztprojektnek. Esetünkben a megadott név 'DemoTest'.
  4. Végül kattintson az „OK” gombra.

Végül látni fogja, hogy a DemoTest projekt hozzáadódik a megoldásböngészőhöz. Ezzel más fájlokat is láthat, mint például a UnitTest1.cs, a tulajdonságok stb. alapértelmezés szerint jönnek létre.

NET Unit Testing Project létrehozása

A tesztprojekt futtatása

Az előző szakaszban létrehozott tesztprojektet az ASP.NET alkalmazásunk tesztelésére használjuk. A következő lépésekben a tesztprojekt futtatását fogjuk látni.

  • Az első lépés egy ASP.NET projektre mutató hivatkozás hozzáadása lenne. Ezt a lépést azért hajtják végre, hogy a tesztprojekt hozzáférjen az ASP.NET projekthez.
  • Ezután megírjuk a tesztkódunkat.
  • Végül a tesztet a Visual Studio segítségével futtatjuk.

Step 1) Demóalkalmazásunk teszteléséhez az első tesztprojektnek hivatkoznia kell a bemutatóalkalmazásra. Adjon hozzá hivatkozást a Demo.aspx megoldásra.

A .NET tesztprojekt futtatása

  1. Kattintson a jobb gombbal a Demo Test projektre
  2. A menüből válassza az Add->Reference opciót.

Step 2) A következő lépés egy hivatkozás hozzáadása a DemoApplication-hez.

A .NET tesztprojekt futtatása

  1. Válassza a Projektek lehetőséget a párbeszédpanel bal oldalán
  2. Kattintson a DemoApplication melletti jelölőnégyzetre
  3. Kattintson az 'OK' gombra.

Ez lehetővé teszi, hogy egy demoteszt-projekt tesztelje a DemoApplication-ünket.

Step 3) Most itt az ideje, hogy hozzáadjuk a tesztkódot a tesztprojektünkhöz.

  • Ehhez először kattintson duplán az UnitTest1 fájlra (az UnitTest1 fájlt a Visual Studio automatikusan hozzáadja a tesztprojekt létrehozásakor) a Solution Explorerben.
  • Ez a fájl lesz futtatva az ASP.NET projekt teszteléséhez.

A .NET tesztprojekt futtatása

Látni fogja a Visual Studio által hozzáadott alábbi kódot a UnitTest1.cs fájlban. Ez a tesztprojekt futtatásához szükséges alapkód.

A .NET tesztprojekt futtatása

Step 4) A következő lépés a „” karakterlánc teszteléséhez használt kód hozzáadása.Guru99 – ASP.NET.”

A .NET tesztprojekt futtatása

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using DemoApplication;

namespace DemoTest
{
 [TestClass]
 public class UnitTest1
 {
   [TestMethod]
   public void TestMethod1()
   {
      Tutorial tp = new Tutorial();
      Assert.AreEqual(tp.Name,"Guru99 - ASP.Net");
   }
 }
}
  1. Hozzon létre egy új „tp” nevű objektumot, amelynek típusa Tutorial
  2. Az Assert.AreEqual metódust a .NET-ben arra használják, hogy egy érték egyenlő-e valamivel. Tehát a mi esetünkben a tp.Name értékeit hasonlítjuk össze a következővel: Guru99 – ASP.NET.

Step 5) Most futtassuk le a tesztprojektünket. Ehhez menjünk a Teszt->Futtatás->Összes teszt menüpontra.

A .NET tesztprojekt futtatása

Kimenet:-

A .NET tesztprojekt futtatása

Megjelenik egy teszt Explorer ablak a Visual Studióban. Ez megjeleníti a fenti eredményt, és megjeleníti, hogy sikeres tesztet futtattak a Visual Studióban.

MSTest attribútumok és állítások, amelyeket használni fogsz

Az MicrosoftA .VisualStudio.TestTools.UnitTesting névtér egy kis attribútum- és állításkészletet tartalmaz, amely a legtöbb ASP.NET egységtesztet lefedi. Ezek első megismerése minden későbbi tesztet könnyebben olvashatóvá és karbantarthatóvá tesz.

  • [Tesztosztály] – tesztek tárolójaként jelöli meg az osztályt. Az MSTest a felfedezéskor átvizsgálja az ezzel az attribútummal rendelkező osztályokat.
  • [Tesztelési módszer] – egy nyilvános, paraméter nélküli metódust jelöl egyedi tesztként. A metódus void, Task vagy ValueTask értéket ad vissza.
  • [TesztInicializálás] / [TesztTisztítás] – minden tesztelési metódus előtt és után futtassa őket. Használja őket megosztott beállítások, például mock repository vagy memórián belüli kontextus létrehozására és eltávolítására.
  • [OsztályInicializálás] / [OsztályTisztítás] – egyszer futnak az egész osztályon. Hasznosak, ha a beállítás költséges, például egy tesztadatbázis seedelésénél.
  • [Adatsor] és [Adattesztelési módszer] – paraméterezett bemeneteket biztosít, így egyetlen vizsgálati módszer több esetet is lefed.

Minden tesztelési metóduson belül az Assert osztály ellenőrzi az eredményt. A gyakori hívások közé tartozik az Assert.AreEqual az értékek összehasonlításához, az Assert.IsTrue és az Assert.IsFalse a logikai értékekhez, az Assert.IsNull és az Assert.IsNotNull a referenciákhoz, valamint az Assert.ThrowsException a várható kivételekhez. Minden tesztet az Arrange, Act, Assert minta használatával strukturálj, így a beállítás, a hívás és az ellenőrzés vizuálisan elkülönül. Ez az elrendezés megkönnyíti a sikertelen tesztek hibakeresését, mivel a hibás sor szinte mindig az alsó egyetlen Assert.

MSTest, NUnit és xUnit összehasonlítása ASP.NET-en

Három tesztelési keretrendszer uralja a .NET ökoszisztémát. Mindegyik a Visual Studio-n belül fut, és integrálódik a dotnet testtel, így a különbség főként a stílusban, a közösségi támogatásban és az alapértelmezett viselkedésben rejlik.

  • MSTeszt – szállította Microsoft és előre telepítve tartalmazza a Visual Studio Unit Test Project sablont, amelyet a bemutató korábbi részében használtunk. Ez a legbiztonságosabb alapértelmezett beállítás, ha egy csapat új az egységtesztelésben a Microsoft Kazal.
  • NUnit – a három közül a legrégebbi, eredetileg innen portolták JUnitGazdag korlátozó modellt, paraméterezett teszteket kínál TestCase és TestCaseSource segítségével, valamint kiforrott támogatást minden .NET verzióban.
  • xUnit.net – az ASP.NET Core és az Entity Framework Core csapatai belsőleg használják. A SetUp metódust konstruktorral és IDisposable-lel helyettesíti, viselkedésenként egy tesztosztályt javasol, és a [TestMethod] helyett a [Fact] és [Theory] metódusokat használja.

Mindhárom keretrendszer attribútumokon keresztül deríti fel a teszteket, lefuttatja a dotnet test parancsot, és trx vagy xUnit XML jelentéseket készít, amelyeket a CI-folyamatok, mint például Azure DevOps, GitHub Actions és Jenkins közvetlenül felhasználható. Egy első ASP.NET projektnél az MSTest használata egyszerűvé teszi az eszköztárat. Azok a csapatok, amelyek gazdagabb paraméterezést szeretnének, vagy már használják az ASP.NET Core-t, gyakran az xUnit-ot választják, hogy az konzisztens legyen azzal a keretrendszerrel, amellyel építették.

Az ASP.NET alkalmazások egységtesztelésének ajánlott gyakorlatai

Néhány szokás betartása gyorsá, megbízhatóvá és hasznossá teszi a csomagokat egy ASP.NET projekt teljes élettartama alatt.

  1. Módszerenként egy viselkedést teszteljen. Egy teszt, amely több, egymással össze nem függő dolgot állít, számos okból kifolyólag kudarcot vall, és a javítása hosszabb időt vesz igénybe.
  2. A teszteket a szándék szerint nevezd el. Egy olyan minta, mint a MethodUnderTest_Scenario_ExpectedResult, a Tesztböngésző kimenetét az osztály olvasható specifikációjának adja ki.
  3. Válassza le a készüléket a külső rendszerektől. A fájl-, hálózati és adatbázis-hívásokat interfészek mögé kell csomagolni, és hamis vagy álhíreket kell becserélni, hogy a teszt ne találja el a valódi függőséget.
  4. Tartsd a teszteket gyorsnak. Törekedj arra, hogy a teljes modulcsomag másodpercek alatt elkészüljön. A lassú tesztek kimaradnak, a kihagyott tesztek pedig elrejtik a regressziókat.
  5. Kövesd az Elrendezés, Cselekedj, Állítás elrendezést. Három rövid, üres sorokkal elválasztott blokk jelzi a szándékot, és megkönnyíti a hibás sorok észrevételét.
  6. Futtasson teszteket minden commit után. Kösd be a dotnet tesztet egy CI-folyamatba, hogy egy hibás teszt a küldés helyett blokkolja az egyesítéstping a termeléshez.
  7. Track kód lefedettség, de ne üldözd. A lefedettség kiemeli a nem tesztelt útvonalakat, de a magas szám önmagában nem garantálja a minőséget. RevNézd meg, mit csinálnak valójában a hiányzó vonalak.

Együttesen alkalmazva ezek a gyakorlatok a fent felépített DemoTest projektet egy olyan csomag magjává alakítják, amely minden egyes push-nál regressziókat észlel, dokumentálja a viselkedést a jövőbeli fejlesztők számára, és magabiztosságot ad egy ASP.NET alkalmazás refaktorálásakor.

GYIK

Igen. A GitHub Copilot képes [TestClass] és [TestMethod] blokkokat scaffolálni, Arrange Act Assert elrendezéseket javasolni, és paraméterezett [DataRow] eseteket generálni egy célmetódus-szignatúrából. RevTekintse meg a generált állításokat, mielőtt megbízna bennük az éles környezetben.

Igen. A gépi tanuláson alapuló asszisztensek megjelölhetik a törékeny teszteket, jobb neveket javasolhatnak, és kiemelhetik a [TestInitialize]-ba tartozó duplikált beállításokat. Lerövidítik az áttekintési időt, de a fejlesztő továbbra is felelős minden egyes állítás helyességéért.

Egy egységteszt egyetlen osztályt vagy metódust izolál, és álprofilként kezeli a függőségeit. Egy integrációs teszt több komponenst tesztel együtt, gyakran valódi adatbázist vagy webszervert érintve. Az egységtesztek ezredmásodperc alatt futnak; az integrációs tesztek tovább tartanak, de kimutatják a kábelezési hibákat.

A Visual Studio Enterprise-ban használja a Tesztelés elemzést Code Minden teszt lefedettsége. Más kiadásokban adja hozzá a Coverlet N-t.uGet csomagolja be és futtassa a dotnet test –collect:”XPlat parancsot Code „Fedezet” egy Cobertura XML-jelentés.

Csomagold a függőséget egy interfész mögé, és injektáld a konstruktoron keresztül. A tesztben adj át egy stubot vagy egy olyan mockot, amely olyan könyvtárakkal van felépítve, mint a Moq vagy az NSubstitute, így a tesztelt egység soha nem érintkezik a valódi adatbázissal vagy HTTP végponttal.

Futtassa a dotnet test parancsot a tesztprojektet tartalmazó mappában. A parancs felépíti a projektet, feltérképezi az összes [TestMethod] elemet, végrehajtja azokat, és kinyomtat egy összegzést. A CI-rendszerek, mint például a GitHub Actions, ugyanezt a parancsot hívják meg egy munkafolyamat-lépésen belül.

Jelölje meg a metódust a [DataTestMethod] paraméterrel, és adjon hozzá egy vagy több [DataRow] attribútumot, amelyek a bemeneti értékeket és a várt eredményt szolgáltatják. Az MSTest ezután soronként egyszer lefuttatja ugyanazt a törzset, minden esethez külön sort hozva létre a Tesztböngészőben.

Írj egy hibás [TestMethod] tesztet, amely leírja a következő szükséges viselkedést, adj hozzá annyi éles kódot, hogy sikeres legyen, majd refaktoráld. Ennek a piros zöld refaktorálási ciklusnak az ismétlése a tesztek alapján vezérli a tervet, ahelyett, hogy fordítva tennéd.

Foglald össze ezt a bejegyzést a következőképpen: