TESTIRANJE JEDINICE u Asp.Netu: Kompletan vodič

⚡ Pametni sažetak

Jedinično testiranje ASP.NET aplikacije u Visual Studiju započinje s Unit Test Projectom, povezuje referencu na ciljni projekt, dodaje MSTest atribute [TestClass] i [TestMethod] te poziva Assert metode kako bi se dokazalo da se klase ponašaju kako je dizajnirano.

  • 🧪 Testni projekt: Dodajte projekt jediničnog testiranja u ASP.NET rješenje i referencirajte ciljni projekt koji želite provjeriti.
  • 🏷️ Značajke: Označite klasu s [TestClass] i svaki test s [TestMethod] kako bi ih MSTest mogao otkriti.
  • Tvrdnje: Koristite Assert.AreEqual, Assert.IsTrue i slične pozive za deklariranje očekivanog ishoda svakog testa.
  • ▶ ️ Pokreni testove: Izbornik Izvrši Test Pokreni sve testove unutar Visual Studija i pregledaj Test Explorer za rezultate prolaza i pada.
  • ⚖️ Izbor okvira: MSTest, NUnit i xUnit rade s dotnet testom; MSTest se isporučuje prema zadanim postavkama, xUnit je preferiran za ASP.NET Core.
  • 🛠️ Najbolja vježba: Izolirajte jedinicu, slijedite naredbe Arrange Act Asssert i održavajte cijeli paket brzim kako bi se izvršavao pri svakom commitu.

Jedinično testiranje u ASP.NET-u

Testiranje je bitan aspekt svakog programskog jezika. Ispitivanje za ASP.NET aplikacije je moguće uz pomoć Visual Studija.

Visual Studio se koristi za izradu testnog koda. Također se koristi za pokretanje testnog koda za ASP.NET aplikaciju. Na taj način postaje jednostavno provjeriti ima li pogrešaka u ASP.NET aplikaciji. U Visual Studiju, modul za testiranje dolazi s funkcionalnošću odmah po instalaciji. Moguće je odmah izvršiti test za ASP.NET projekt.

Uvod u testiranje za ASP.NET

Prva razina testiranja ASP.NET projekta je testiranje na razini jedinice. Ovo testiranje je funkcionalnost aplikacije. Testiranje se provodi kako bi se osiguralo da se aplikacija ponaša kako se očekuje. U ASP.NET-u, prvi zadatak je stvaranje testnog projekta u Visual Studiju. Testni projekt će sadržavati potreban kod za testiranje aplikacije.

Razmotrimo donju web stranicu. Na stranici imamo poruku „Guru99 – prikazuje se "ASP.NET". Kako sada možemo potvrditi da se ispravna poruka prikazuje kada se pokrene ASP.NET projekt? To se postiže dodavanjem testnog projekta ASP.NET rješenju (koristi se za razvoj web aplikacija). Ovaj testni projekt bi osigurao da se korisniku prikazuje ispravna poruka.

Uvod u testiranje za ASP.NET

Pogledajmo sada detaljnije i vidimo kako možemo raditi na testiranju u ASP.NET-u.

Stvaranje .NET Unit Testing projekta

Prije nego što izradimo testni projekt, moramo izvršiti donje korake visoke razine.

  1. Koristite našu 'DemoAplikaciju' korištenu u prethodnim odjeljcima. Ovo će biti naša aplikacija koju treba testirati.
  2. Dodat ćemo novu klasu u DemoApplication. Ova klasa će sadržavati niz znakova 'Guru99 – ASP.NET.' Ovaj niz znakova bit će testiran u našem projektu testiranja.
  3. Na kraju ćemo izraditi testni projekt. Koristi se za testiranje ASP.NET aplikacije.

Dakle, slijedimo gore navedene korake na visokoj razini i vidimo kako implementirati testiranje.

Korak 1) Provjerite je li DemoApplication otvorena u Visual Studiju.

Korak 2) Dodajmo sada novu klasu u DemoApplication. Ova klasa će sadržavati niz znakova 'Guru99 – ASP.NET.' Ovaj niz znakova bit će testiran u našem projektu testiranja.

Slijedite korake u nastavku za dodavanje nove klase.

Stvaranje .NET Unit Testing projekta

  1. U Visual Studiju desnom tipkom miša kliknite 'DemoApplication' u Solution Exploreru.
  2. Odaberite opciju Add->Class iz kontekstnog izbornika.

Korak 3) U ovom koraku

Stvaranje .NET Unit Testing projekta

  1. Dajte naziv 'Tutorial.cs' novoj klasi.
  2. Pritisnite gumb "Dodaj" za dodavanje datoteke u DemoApplication.

Sada je nova klasa dodana datoteci “DemoApplication.”

Korak 4) Otvorite novu datoteku Tutorial.cs iz "DemoApplication". Dodajte niz "Guru99 – ASP.NET.”

Da biste otvorili datoteku, dvaput kliknite na datoteku Tutorial.cs u Solution Exploreru.

Stvaranje .NET Unit Testing projekta

Datoteka će imati već napisan zadani kod. Nemojte se zamarati oko tog koda, samo dodajte donji redak koda.

Stvaranje .NET Unit Testing projekta

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

Code Obrazloženje:-

  1. Varijabla Name je tipa string.
  2. Konačno, u konstruktoru klase Tutorial, dodijelite vrijednost varijable Name. Vrijednost se dodjeljuje varijabli „Guru99 – ASP.NET”

Korak 5) Sada idite na datoteku demo.aspx i dodajte retke koda za prikaz teksta "Guru99 – ASP.NET.”

Stvaranje .NET Unit Testing projekta

<!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 Obrazloženje:-

  1. Prvi redak stvara objekt klase 'Tutorial'. Ovo je prvi korak pri radu s klasama i objektima. Naziv dodijeljen objektu je 'tp'.
  2. Na kraju pozivamo 'tutorial.cs' iz datoteke demo.aspx. Prikazuje vrijednost varijable Name.

Kada pokrenete gornji program u Visual Studiju, dobit ćete sljedeći izlaz.

Izlaz:-

Stvaranje .NET Unit Testing projekta

Iz izlaza vidite poruku "Guru99 – prikazan je ASP.NET”.

Korak 6) Sada dodajmo naš testni projekt u Demo aplikaciju. To se radi uz pomoć Visual Studija.

Stvaranje .NET Unit Testing projekta

  1. Desnom tipkom miša kliknite Rješenje – DemoApplication.
  2. U kontekstnom izborniku odaberite opciju 'Novi projekt'.

Korak 7) Korak uključuje dodavanje projekta Unit Test demo aplikaciji.

Stvaranje .NET Unit Testing projekta

  1. Kliknite na vrstu stavke kao 'Test' na lijevoj ploči.
  2. Odaberite stavku kao 'Unit Test Project' s popisa koji se pojavljuje u središnjem dijelu dijaloškog okvira.
  3. Dajte naziv testnom projektu. U našem slučaju, dani naziv je 'DemoTest'.
  4. Na kraju kliknite gumb "OK".

Na kraju ćete vidjeti projekt DemoTest dodan u preglednik rješenja. S ovim također možete vidjeti da su druge datoteke poput UnitTest1.cs, svojstva itd. generirane prema zadanim postavkama.

Stvaranje .NET Unit Testing projekta

Izvođenje testnog projekta

Testni projekt kreiran u prethodnom odjeljku koristi se za testiranje naše ASP.NET aplikacije. U sljedećim koracima vidjet ćemo kako pokrenuti testni projekt.

  • Prvi korak bio bi dodavanje reference na ASP.NET projekt. Ovaj se korak provodi kako bi testni projekt imao pristup ASP.NET projektu.
  • Zatim ćemo napisati naš testni kod.
  • Na kraju ćemo pokrenuti test koristeći Visual Studio.

Korak 1) Da bismo testirali našu Demo aplikaciju, prvi testni projekt treba referencirati Demo aplikaciju. Dodajte referencu na rješenje Demo.aspx.

Pokretanje .NET testnog projekta

  1. Desnom tipkom miša kliknite projekt Demo Test
  2. Iz izbornika odaberite opciju Dodaj->Referenca.

Korak 2) Sljedeći korak je dodavanje reference na DemoApplication.

Pokretanje .NET testnog projekta

  1. Odaberite opciju Projekti s lijeve strane dijaloškog okvira
  2. Pritisnite potvrdni okvir pored DemoApplication
  3. Kliknite na gumb 'OK'.

To će omogućiti demotest projektu da testira našu DemoAplikaciju.

Korak 3) Sada je vrijeme da dodamo testni kod našem testnom projektu.

  • Za ovaj prvi dvostruki klik na datoteku UnitTest1 (datoteku UnitTest1 automatski dodaje Visual Studio kada se izradi testni projekt) u Solution Exploreru.
  • Ovo je datoteka koja će se pokrenuti za testiranje ASP.NET projekta.

Pokretanje .NET testnog projekta

Vidjet ćete donji kod koji je dodao Visual Studio u datoteci UnitTest1.cs. Ovo je osnovni kod potreban za pokretanje testnog projekta.

Pokretanje .NET testnog projekta

Korak 4) Sljedeći korak je dodavanje koda koji se koristi za testiranje niza znakova "Guru99 – ASP.NET.”

Pokretanje .NET testnog projekta

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. Napravite novi objekt pod nazivom 'tp' tipa Tutorial
  2. Metoda Assert.AreEqual se koristi u .NET-u za provjeru je li vrijednost jednaka nečemu. Dakle, u našem slučaju uspoređujemo vrijednosti tp.Name s Guru99 – ASP.NET.

Korak 5) Sada pokrenimo naš testni projekt. Za to moramo otići na opciju izbornika Test->Pokreni->Svi testovi

Pokretanje .NET testnog projekta

Izlaz:-

Pokretanje .NET testnog projekta

U Visual Studiju pojavit će se testni prozor Explorera. Ovo će pokazati gornji rezultat i prikazati da je uspješan test pokrenut u Visual Studiju.

MSTest atributi i tvrdnje koje ćete koristiti

The MicrosoftImenski prostor .VisualStudio.TestTools.UnitTesting sadrži mali skup atributa i tvrdnji koji pokrivaju većinu ASP.NET jediničnih testova. Učenje ovih prvih čini svaki kasniji test lakšim za čitanje i održavanje.

  • [TestnaKlasa] – označava klasu kao spremnik testova. MSTest skenira klase s ovim atributom u vrijeme otkrivanja.
  • [Metoda ispitivanja] – označava javnu metodu bez parametara kao pojedinačni test. Metoda vraća void, Task ili ValueTask.
  • [Inicijalizacija testa] / [Čišćenje testa] – pokreću se prije i poslije svake testne metode. Koristite ih za stvaranje i odlaganje dijeljenih postavki kao što je lažno spremište ili kontekst u memoriji.
  • [Inicijalizacija klase] / [Čišćenje klase] – pokreću se jednom za cijeli razred. Korisni su kada je postavljanje skupo, na primjer za postavljanje testne baze podataka.
  • [RedakPodataka] i [MetodaTestiranjaPodataka] – osigurati parametrizirane ulaze tako da jedna metoda ispitivanja pokriva nekoliko slučajeva.

Unutar svake metode testiranja, klasa Assert provjerava ishod. Uobičajeni pozivi uključuju Assert.AreEqual za usporedbe vrijednosti, Assert.IsTrue i Assert.IsFalse za logičke vrijednosti, Assert.IsNull i Assert.IsNotNull za reference te Assert.ThrowsException za očekivane iznimke. Strukturirajte svaki test pomoću uzorka Arrange, Act, Assert tako da postavljanje, pozivanje i provjera ostanu vizualno odvojeni. Ovaj raspored olakšava otklanjanje pogrešaka u testovima koji nisu uspjeli jer je redak koji označava neuspjeh gotovo uvijek jedina klasa Assert na dnu.

Usporedba MSTest-a, NUnit-a i xUnit-a za ASP.NET

Tri okvira za testiranje dominiraju .NET ekosustavom. Svaki od njih radi unutar Visual Studija i integrira se s dotnet testom, tako da je razlika uglavnom u stilu, podršci zajednice i zadanom ponašanju.

  • MSTest – poslano od strane Microsoft i dolazi unaprijed instaliran s predloškom projekta za testiranje jedinice Visual Studio koji je ranije korišten u ovom vodiču. To je najsigurnija zadana vrijednost kada je tim nov u testiranju jedinice na Microsoft stog.
  • NUjedinica – najstariji od tri, izvorno prenesen iz JUnitNudi bogat model ograničenja, parametrizirane testove putem TestCasea i TestCaseSourcea te zrelu podršku u svakoj .NET verziji.
  • xUnit.net – interno ga koriste timovi ASP.NET Core i Entity Framework Core. Zamjenjuje metodu SetUp konstruktorom i IDisposableom, potiče jednu testnu klasu po ponašanju i koristi [Fact] i [Theory] umjesto [TestMethod].

Sva tri okvira otkrivaju testove putem atributa, pokreću se putem naredbe dotnet test i izrađuju trx ili xUnit XML izvješća koja CI cjevovodi poput Azure DevOps, GitHub akcije i Jenkins može se izravno koristiti. Za prvi ASP.NET projekt, korištenje MSTesta održava alatni lanac jednostavnim. Timovi koji žele bogatiju parametrizaciju ili već koriste ASP.NET Core često biraju xUnit zbog dosljednosti s okvirom s kojim je izgrađen.

Najbolje prakse za jedinično testiranje ASP.NET aplikacija

Slijeđenje malog skupa navika održava paket brzim, pouzdanim i korisnim tijekom životnog vijeka ASP.NET projekta.

  1. Testirajte jedno ponašanje po metodi. Test koji tvrdi nekoliko nepovezanih stvari ne uspijeva iz mnogo razloga i potrebno je više vremena da se popravi.
  2. Imenujte testove prema namjeri. Uzorak kao što je MethodUnderTest_Scenario_ExpectedResult pretvara izlaz Test Explorera u čitljivu specifikaciju klase.
  3. Izolirajte uređaj od vanjskih sustava. Zamotajte pozive datoteka, mreže i baze podataka iza sučelja i zamijenite lažnim ili mock verzijama kako test ne bi pogodio stvarnu ovisnost.
  4. Neka testovi budu brzi. Cilj je da cijeli paket jedinica bude završen za nekoliko sekundi. Spori testovi se preskaču, a preskočeni testovi skrivaju regresije.
  5. Slijedite raspored Rasporedi, Djeluj, Potvrdi. Tri kratka bloka s praznim crtama između njih signaliziraju namjeru i olakšavaju uočavanje grešaka u crtama.
  6. Pokreni testove na svakom commitu. Poveži dotnet test u CI cjevovod tako da neispravan test blokira spajanje umjesto slanjaping na proizvodnju.
  7. Tracpokrivenost k koda, ali nemojte ga juriti. Pokrivenost ističe neprovjerene puteve, ali sam veliki broj ne jamči kvalitetu. RevPogledajte što nedostajuće linije zapravo rade.

Primijenjene zajedno, ove prakse pretvaraju gore izgrađeni DemoTest projekt u sjeme paketa koji hvata regresije pri svakom push-u, dokumentira ponašanje za buduće programere i daje povjerenje prilikom refaktoriranja ASP.NET aplikacije.

Pitanja i odgovori

Da. GitHub Copilot može scaffoldirati blokove [TestClass] i [TestMethod], predložiti rasporede Arrange Act Assert i generirati parametrizirane slučajeve [DataRow] iz potpisa ciljne metode. Revpregledajte generirane tvrdnje prije nego što im povjerite produkciju.

Da. Asistenti temeljeni na strojnom učenju mogu označiti krhke testove, predložiti bolja imena i istaknuti duplicirane postavke koje pripadaju u [TestInitialize]. Skraćuju vrijeme pregleda, ali programer i dalje posjeduje ispravnost svake tvrdnje.

Jedinični test izolira jednu klasu ili metodu i ismijava njezine ovisnosti. Integracijski test vježba nekoliko komponenti zajedno, često pogađajući stvarnu bazu podataka ili web poslužitelj. Jedinični testovi se izvode u milisekundama; integracijski testovi traju dulje, ali otkrivaju greške u ožičenju.

U programu Visual Studio Enterprise koristite Test Analyze Code Pokrivenost za sve testove. Na ostalim izdanjima dodajte omotnicu NuGet pakiraj i pokreni dotnet test – prikupi: ”XPlat Code "Pokrivenost" za izradu Cobertura XML izvješće.

Omotajte ovisnost iza sučelja i ubrizgajte je kroz konstruktor. U testu, proslijedite stub ili mock izgrađen s bibliotekama kao što su Moq ili NSubstitute tako da jedinica koja se testira nikada ne dodiruje stvarnu bazu podataka ili HTTP krajnju točku.

Pokrenite dotnet test u mapi koja sadrži testni projekt. Naredba gradi projekt, otkriva svaku [TestMethod], izvršava ih i ispisuje sažetak. CI sustavi poput GitHub Actions pozivaju istu naredbu unutar koraka tijeka rada.

Označite metodu s [DataTestMethod] i dodajte jedan ili više atributa [DataRow] koji daju ulazne vrijednosti i očekivani rezultat. MSTest zatim pokreće isto tijelo jednom po retku, stvarajući zaseban redak u Test Exploreru za svaki slučaj.

Napišite [TestMethod] koja opisuje sljedeće potrebno ponašanje, dodajte dovoljno produkcijskog koda da prođe, a zatim refaktorirajte. Ponavljanje ove crveno-zelene petlje refaktoriranja održava dizajn vođen testovima umjesto obrnuto.

Sažmite ovu objavu uz: