TESTARE A UNITĂȚII în Asp.Net: Tutorial complet

⚡ Rezumat inteligent

Testarea unitară a unei aplicații ASP.NET în Visual Studio începe cu un proiect de testare unitară, conectează o referință la proiectul țintă, adaugă atributele MSTest [TestClass] și [TestMethod] și apelează metodele Assert pentru a demonstra că clasele se comportă conform proiectării.

  • 🧪 Proiect de testare: Adăugați un proiect de test unitar la soluția ASP.NET și faceți referire la proiectul țintă pe care doriți să îl verificați.
  • 🏷️ Atribute: Marcați clasa cu [TestClass] și fiecare test cu [TestMethod], astfel încât MSTest să le poată descoperi.
  • ✅ Afirmații: Folosește Assert.AreEqual, Assert.IsTrue și apeluri similare pentru a declara rezultatul așteptat al fiecărui test.
  • ▶ ️ Rulați teste: Meniul Executare test Rulați toate testele în Visual Studio și inspectați Test Explorer pentru rezultatele de succes și de eșec.
  • 🇧🇷 Alegerea cadrului: MSTest, NUnit și xUnit funcționează toate cu dotnet test; MSTest este livrat în mod implicit, xUnit este preferat pentru ASP.NET Core.
  • 🛠️ Cea mai buna practica: Izolați unitatea, urmați comanda Arrange Act Assert și mențineți întreaga suită rapidă, astfel încât să ruleze la fiecare commit.

Testarea unitară în ASP.NET

Testarea este un aspect esențial al oricărui limbaj de programare. Testarea pentru aplicațiile ASP.NET este posibil cu ajutorul Visual Studio.

Visual Studio este utilizat pentru a crea cod de testare. De asemenea, este utilizat pentru a rula codul de testare pentru o aplicație ASP.NET. În acest fel, devine simplă verificarea oricăror erori într-o aplicație ASP.NET. În Visual Studio, modulul de testare vine cu o funcționalitate predefinită. Se poate efectua imediat un test pentru un proiect ASP.NET.

Introducere în testarea pentru ASP.NET

Primul nivel de testare a unui proiect ASP.NET este testarea la nivel de unitate. Acest test vizează funcționalitatea unei aplicații. Testarea este efectuată pentru a se asigura că aplicația se comportă conform așteptărilor. În ASP.NET, prima sarcină este crearea unui proiect de testare în Visual Studio. Proiectul de testare va conține codul necesar pentru a testa aplicația.

Să luăm în considerare pagina web de mai jos. În pagină, avem mesajul „Guru99 – ASP.NET”. Acum, cum putem confirma că mesajul corect este afișat atunci când rulează un proiect ASP.NET? Acest lucru se face prin adăugarea unui proiect de testare la soluția ASP.NET (utilizată pentru dezvoltarea de aplicații web). Acest proiect de testare ar asigura afișarea mesajului corect utilizatorului.

Introducere în testarea pentru ASP.NET

Să analizăm mai detaliat acum și să vedem cum putem lucra la testare în ASP.NET.

Crearea unui proiect de testare unitară .NET

Înainte de a crea un proiect de testare, trebuie să parcurgem pașii de mai jos de nivel înalt.

  1. Utilizați „Aplicația Demo” folosită în secțiunile anterioare. Aceasta va fi aplicația noastră care trebuie testată.
  2. Vom adăuga o nouă clasă la DemoApplication. Această clasă va conține un șir de caractere numit „Guru99 – ASP.NET. Acest șir de caractere va fi testat în proiectul nostru de testare.
  3. În final, vom crea un proiect de testare. Acesta este folosit pentru a testa aplicația ASP.NET.

Așadar, haideți să urmăm pașii de nivel înalt de mai sus și să vedem cum să implementăm testarea.

Pas 1) Asigurați-vă că DemoApplication este deschisă în Visual Studio.

Pas 2) Să adăugăm acum o nouă clasă la DemoApplication. Această clasă va conține un șir de caractere numit „Guru99 – ASP.NET. Acest șir de caractere va fi testat în proiectul nostru de testare.

Urmați pasul de mai jos pentru a adăuga o nouă clasă.

Crearea unui proiect de testare unitară .NET

  1. În Visual Studio, faceți clic dreapta pe „DemoApplication” în Solution Explorer.
  2. Alegeți opțiunea Add->Class din meniul contextual.

Pas 3) În această etapă,

Crearea unui proiect de testare unitară .NET

  1. Dați un nume „Tutorial.cs” pentru noua clasă.
  2. Faceți clic pe butonul „Adăugați” pentru a adăuga fișierul la DemoApplication.

Acum, o nouă clasă este adăugată la fișierul „DemoApplication”.

Pas 4) Deschideți noul fișier Tutorial.cs din „DemoApplication”. Adăugați șirul „Guru99 – ASP.NET.”

Pentru a deschide fișierul, faceți dublu clic pe fișierul Tutorial.cs din Solution Explorer.

Crearea unui proiect de testare unitară .NET

Fișierul va avea deja scris un cod implicit. Nu vă deranjați cu acest cod, doar adăugați linia de cod de mai jos.

Crearea unui proiect de testare unitară .NET

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

Code Explicaţie:-

  1. Variabila Nume este de tip șir.
  2. În final, în constructorul clasei Tutorial, atribuiți valoarea variabilei Name. Valoarea este atribuită lui „Guru99 – ASP.NET”

Pas 5) Acum accesați fișierul demo.aspx și adăugați liniile de cod pentru a afișa textul „Guru99 – ASP.NET.”

Crearea unui proiect de testare unitară .NET

<!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 Explicaţie:-

  1. Prima linie creează un obiect din clasa „Tutorial”. Acesta este primul pas atunci când se lucrează cu clase și obiecte. Numele dat obiectului este „tp”.
  2. În cele din urmă, numim „tutorial.cs” din fișierul demo.aspx. Afișează valoarea variabilei Nume.

Când rulați programul de mai sus în Visual Studio, veți obține următoarea ieșire.

Ieșire: -

Crearea unui proiect de testare unitară .NET

Din ieșire, vedeți mesajul „Guru99 – ASP.NET”.

Pas 6) Acum să adăugăm proiectul nostru de test la aplicația demo. Acest lucru se face cu ajutorul Visual Studio.

Crearea unui proiect de testare unitară .NET

  1. Faceți clic dreapta pe Soluție – DemoApplication.
  2. În meniul contextual, alegeți opțiunea „Proiect nou”.

Pas 7) Pasul implică adăugarea proiectului Unit Test la aplicația demo.

Crearea unui proiect de testare unitară .NET

  1. Faceți clic pe tipul de element ca „Test” din panoul din stânga.
  2. Alegeți elementul ca „Proiect de testare unitară” din listă, care apare în partea centrală a casetei de dialog.
  3. Dați un nume pentru proiectul de testare. În cazul nostru, numele dat este „DemoTest”.
  4. În cele din urmă, faceți clic pe butonul „OK”.

În cele din urmă, veți vedea proiectul DemoTest adăugat la exploratorul de soluții. Cu aceasta, puteți vedea și alte fișiere precum UnitTest1.cs, proprietăți etc. sunt generate implicit.

Crearea unui proiect de testare unitară .NET

Derularea proiectului de testare

Proiectul de testare creat în secțiunea anterioară este utilizat pentru a testa aplicația noastră ASP.NET. În pașii următori, vom vedea cum se execută proiectul de testare.

  • Primul pas ar fi adăugarea unei referințe la proiectul ASP.NET. Acest pas este realizat astfel încât proiectul de testare să aibă acces la proiectul ASP.NET.
  • Apoi vom scrie codul nostru de testare.
  • În cele din urmă, vom rula testul folosind Visual Studio.

Pas 1) Pentru a testa Aplicația Demo, primul proiect de testare trebuie să facă referire la Aplicația Demo. Adăugați o referință la soluția Demo.aspx.

Rularea proiectului de testare .NET

  1. Faceți clic dreapta pe proiectul Demo Test
  2. Din meniu alegeți opțiunea Add->Reference.

Pas 2) Următorul pas este să adăugați o referință la DemoApplication.

Rularea proiectului de testare .NET

  1. Selectați opțiunea Proiecte din partea stângă a casetei de dialog
  2. Faceți clic pe caseta de selectare de lângă DemoApplication
  3. Faceți clic pe butonul „OK”.

Acest lucru va permite unui proiect de demotest să testeze DemoApplication.

Pas 3) Acum este momentul să adăugăm codul de test la proiectul nostru de testare.

  • Pentru acest prim dublu clic pe fișierul UnitTest1 (fișierul UnitTest1 este adăugat automat de Visual Studio atunci când proiectul de testare este creat) în soluția Explorer.
  • Acesta este fișierul care va fi rulat pentru a testa proiectul ASP.NET.

Rularea proiectului de testare .NET

Veți vedea codul de mai jos adăugat de Visual Studio în fișierul UnitTest1.cs. Acesta este codul de bază necesar pentru rularea proiectului de testare.

Rularea proiectului de testare .NET

Pas 4) Următorul pas este adăugarea codului care este utilizat pentru a testa șirul „Guru99 – ASP.NET.”

Rularea proiectului de testare .NET

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. Creați un nou obiect numit „tp” de tip Tutorial
  2. Metoda Assert.AreEqual este utilizată în .NET pentru a testa dacă o valoare este egală cu ceva. Așadar, în cazul nostru, comparăm valorile lui tp.Name cu Guru99 – ASP.NET.

Pas 5) Acum haideți să rulăm proiectul nostru de testare. Pentru aceasta, trebuie să mergem la opțiunea de meniu Testare->Run->Toate testele

Rularea proiectului de testare .NET

Ieșire: -

Rularea proiectului de testare .NET

O fereastră de test Explorer va apărea în Visual Studio. Aceasta va afișa rezultatul de mai sus și va afișa că un test a fost executat cu succes în Visual Studio.

Atribute și afirmații MSTest pe care le veți utiliza

MicrosoftSpațiul de nume .VisualStudio.TestTools.UnitTesting conține un set mic de atribute și aserțiuni care acoperă majoritatea testelor unitare ASP.NET. Învățarea acestora mai întâi face ca fiecare test ulterior să fie mai ușor de citit și de întreținut.

  • [Clasă de testare] – marchează clasa drept un container de teste. MSTest scanează clasele cu acest atribut în momentul descoperirii.
  • [Metodă de testare] – marchează o metodă publică, fără parametri, ca test individual. Metoda returnează void, Task sau ValueTask.
  • [InițializareTest] / [CurățareTest] – rulează înainte și după fiecare metodă de testare. Folosește-le pentru a crea și elimina configurații partajate, cum ar fi un depozit mock sau un context în memorie.
  • [InițializareClasă] / [CurățareClasă] – rulează o singură dată pentru întreaga clasă. Sunt utile atunci când configurarea este costisitoare, de exemplu, pentru seaming-ul unei baze de date de testare.
  • [DataRow] și [DataTestMethod] – furnizează intrări parametrizate astfel încât o singură metodă de testare să acopere mai multe cazuri.

În interiorul fiecărei metode de testare, clasa Assert verifică rezultatul. Apelurile comune includ Assert.AreEqual pentru comparații de valori, Assert.IsTrue și Assert.IsFalse pentru valori booleene, Assert.IsNull și Assert.IsNotNull pentru referințe și Assert.ThrowsException pentru excepțiile așteptate. Structurați fiecare test folosind modelul Arrange, Act, Assert, astfel încât configurarea, invocarea și verificarea să rămână separate vizual. Această structură face ca testele eșuate să fie ușor de depanat, deoarece linia eșuată este aproape întotdeauna singura Assert din partea de jos.

MSTest, NUnit și xUnit comparate pentru ASP.NET

Trei framework-uri de testare domină ecosistemul .NET. Fiecare dintre ele rulează în Visual Studio și se integrează cu dotnet test, așadar diferența constă în principal în stil, suportul comunității și comportamentul implicit.

  • MSTest – expediat de Microsoft și vine preinstalat cu șablonul Visual Studio Unit Test Project utilizat anterior în acest tutorial. Este cea mai sigură opțiune implicită atunci când o echipă este nouă în testarea unitară pe Microsoft grămadă.
  • NUnit – cel mai vechi dintre cele trei, portat inițial din JUnitOferă un model bogat de constrângeri, teste parametrizate prin TestCase și TestCaseSource și suport matur pentru fiecare versiune .NET.
  • xUnit.net – utilizat intern de echipele ASP.NET Core și Entity Framework Core. Înlocuiește metoda SetUp cu constructor și IDisposable, încurajează o clasă de testare per comportament și folosește [Fact] și [Theory] în loc de [TestMethod].

Toate cele trei framework-uri descoperă teste prin atribute, rulează prin comanda dotnet test și produc rapoarte XML trx sau xUnit pe care conductele CI, cum ar fi Azure DevOps, acțiuni GitHub și Jenkins poate consuma direct. Pentru un prim proiect ASP.NET, utilizarea MSTest menține lanțul de instrumente simplu. Echipele care doresc o parametrizare mai bogată sau utilizează deja ASP.NET Core aleg adesea xUnit pentru consecvență cu framework-ul cu care a fost construit.

Cele mai bune practici pentru testarea unitară a aplicațiilor ASP.NET

Respectarea unui set restrâns de obiceiuri menține o suită rapidă, fiabilă și utilă pe parcursul existenței unui proiect ASP.NET.

  1. Testați câte un comportament per metodă. Un test care afirmă mai multe lucruri fără legătură eșuează din mai multe motive și durează mai mult pentru a fi remediat.
  2. Teste de nume după intenție. Un model precum MethodUnderTest_Scenario_ExpectedResult face ca Test Explorer să afișeze o specificație lizibilă a clasei.
  3. Izolați unitatea de sistemele externe. Încadrați apelurile de fișiere, rețea și bază de date în spatele interfețelor și înlocuiți-le cu elemente false sau simulate, astfel încât testul să nu lovească dependența reală.
  4. Mențineți testele rapide. Scopul este ca întreaga suită de unități să se termine în câteva secunde. Testele lente sunt omise, iar testele omise ascund regresiile.
  5. Urmați structura Aranjare, Acționare, Afirmare. Trei blocuri scurte cu linii goale între ele semnalează intenția și fac ca liniile defecte să fie ușor de observat.
  6. Rulați teste pentru fiecare commit. Conectați testul dotnet la o conductă CI, astfel încât un test defect să blocheze îmbinarea în loc să livrezeping la producție.
  7. Tracacoperire a codului k, dar nu o urmăriți. Acoperirea evidențiază căi netestate, dar un număr mare nu garantează calitatea. RevVedeți ce fac de fapt liniile lipsă.

Aplicate împreună, aceste practici transformă proiectul DemoTest construit mai sus în baza unei suite care detectează regresii la fiecare acțiune, documentează comportamentul pentru viitorii dezvoltatori și oferă încredere la refactorizarea unei aplicații ASP.NET.

Întrebări frecvente

Da. GitHub Copilot poate structura blocurile [TestClass] și [TestMethod], poate sugera machete Arrange Act Assert și poate genera cazuri [DataRow] parametrizate dintr-o semnătură de metodă țintă. RevVizualizați aserțiunile generate înainte de a le acorda încredere în producție.

Da. Asistenții bazați pe învățarea automată pot semnala teste fragile, pot propune nume mai bune și pot evidenția configurațiile duplicate care aparțin [TestInitialize]. Aceștia scurtează timpul de revizuire, dar dezvoltatorul își asumă în continuare responsabilitatea pentru corectitudinea fiecărei afirmații.

Un test unitar izolează o clasă sau o metodă și simulează dependențele acesteia. Un test de integrare exersează mai multe componente împreună, adesea lovind o bază de date reală sau un server web. Testele unitare se execută în milisecunde; testele de integrare durează mai mult, dar detectează erorile de cablare.

În Visual Studio Enterprise, utilizați Test Analyze Code Acoperire pentru toate testele. În alte ediții, adăugați Copertina NuGet pachet și rulează testul dotnet –collect:”XPlat Code „Acoperire” pentru a produce o Cobertura Raport XML.

Încadrați dependența în spatele unei interfețe și injectați-o prin constructor. În test, transmiteți un stub sau o mock construită cu biblioteci precum Moq sau NSubstitute, astfel încât unitatea testată să nu atingă niciodată baza de date reală sau endpoint-ul HTTP.

Executați comanda dotnet test în folderul care conține proiectul de testare. Comanda construiește proiectul, descoperă fiecare [TestMethod], le execută și afișează un rezumat. Sistemele CI precum GitHub Actions apelează aceeași comandă în cadrul unui pas de flux de lucru.

Marcați metoda cu [DataTestMethod] și adăugați unul sau mai multe atribute [DataRow] care furnizează valorile de intrare și rezultatul așteptat. MSTest rulează apoi același corp o dată pe rând, producând o linie separată în Test Explorer pentru fiecare caz.

Scrieți o [TestMethod] eșuată care descrie următorul comportament necesar, adăugați suficient cod de producție pentru a-l face să treacă, apoi refactorizați. Repetarea acestei bucle de refactorizare roșu-verde menține designul ghidat de teste în loc de invers.

Rezumați această postare cu: