ENHETSTESTING i Asp.Net: Komplett opplæring

⚡ Smart oppsummering

Enhetstesting av et ASP.NET-program i Visual Studio starter med et enhetstestprosjekt, kobler en referanse til målprosjektet, legger til MSTest [TestClass]- og [TestMethod]-attributter, og kaller Assert-metoder for å bevise at klasser oppfører seg som designet.

  • 🧪 Testprosjekt: Legg til et enhetstestprosjekt i ASP.NET-løsningen og referer til målprosjektet du vil verifisere.
  • 🏷️ Attributter: Merk klassen med [TestClass] og hver test med [TestMethod] slik at MSTest kan oppdage dem.
  • Påstander: Bruk Assert.AreEqual, Assert.IsTrue og lignende kall for å deklarere det forventede resultatet av hver test.
  • ▶ ️ Kjør tester: Utfør test-menyen Kjør alle tester i Visual Studio, og kontroller Test Explorer for bestått- og ikke-beståtte resultater.
  • 🇧🇷 Rammevalg: MSTest, NUnit og xUnit fungerer alle med dotnet-test; MSTest leveres som standard, xUnit foretrekkes for ASP.NET Core.
  • 🛠️ Beste praksis: Isoler enheten, følg Arrange Act Assert, og hold hele suiten rask slik at den kjører på hver commit.

Enhetstesting i ASP.NET

Testing er et viktig aspekt ved ethvert programmeringsspråk. Testing for ASP.NET-applikasjoner er mulig ved hjelp av Visual Studio.

Visual Studio brukes til å lage testkode. Det brukes også til å kjøre testkoden for et ASP.NET-program. På denne måten blir det enkelt å sjekke for eventuelle feil i et ASP.NET-program. I Visual Studio kommer testmodulen med en ferdig funksjonalitet. Man kan umiddelbart utføre en test for et ASP.NET-prosjekt.

Introduksjon til testing for ASP.NET

Det første nivået av testing av et ASP.NET-prosjekt er testing på enhetsnivå. Denne testen er funksjonaliteten til et program. Testingen utføres for å sikre at programmet oppfører seg som forventet. I ASP.NET er den første oppgaven å opprette et testprosjekt i Visual Studio. Testprosjektet vil inneholde den nødvendige koden for å teste programmet.

La oss se på nettsiden nedenfor. På siden har vi meldingen «Guru99 – ASP.NET” vises. Hvordan kan vi nå bekrefte at riktig melding vises når et ASP.NET-prosjekt kjører? Dette gjøres ved å legge til et testprosjekt i ASP.NET-løsningen (brukes til å utvikle nettbaserte applikasjoner). Dette testprosjektet vil sikre at riktig melding vises til brukeren.

Introduksjon til testing for ASP.NET

La oss se nærmere på dette nå, og se hvordan vi kan jobbe med testing i ASP.NET.

Opprette et .NET-enhetstestingsprosjekt

Før vi oppretter et testprosjekt, må vi utføre trinnene nedenfor på høyt nivå.

  1. Bruk vår "DemoApplication" brukt i de tidligere delene. Dette vil være vår applikasjon som må testes.
  2. Vi legger til en ny klasse i DemoApplication. Denne klassen vil inneholde en streng kalt 'Guru99 – ASP.NET.' Denne strengen vil bli testet i testprosjektet vårt.
  3. Til slutt skal vi opprette et testprosjekt. Dette brukes til å teste ASP.NET-applikasjonen.

Så la oss følge de ovennevnte trinnene på overordnet nivå og se hvordan vi implementerer testing.

Trinn 1) Sørg for at DemoApplication er åpen i Visual Studio.

Trinn 2) La oss nå legge til en ny klasse i DemoApplication. Denne klassen vil inneholde en streng kalt 'Guru99 – ASP.NET.' Denne strengen vil bli testet i testprosjektet vårt.

Følg trinnene nedenfor for å legge til en ny klasse.

Opprette et .NET-enhetstestingsprosjekt

  1. I Visual Studio, høyreklikk 'DemoApplication' i Solution Explorer.
  2. Velg alternativet Legg til->Klasse fra hurtigmenyen.

Trinn 3) I dette trinnet

Opprette et .NET-enhetstestingsprosjekt

  1. Gi et navn "Tutorial.cs" for den nye klassen.
  2. Klikk på 'Legg til'-knappen for å legge til filen i DemoApplication.

Nå legges en ny klasse til filen "DemoApplication."

Trinn 4) Åpne den nye Tutorial.cs-filen fra «DemoApplication». Legg til strengen «Guru99 – ASP.NET.

For å åpne filen, dobbeltklikk på Tutorial.cs-filen i Solution Explorer.

Opprette et .NET-enhetstestingsprosjekt

Filen vil ha en standardkode allerede skrevet. Ikke bry deg om den koden, bare legg til kodelinjen nedenfor.

Opprette et .NET-enhetstestingsprosjekt

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

Code Forklaring:-

  1. Navnvariabelen er av typen streng.
  2. Til slutt, i konstruktøren av Tutorial-klassen, tilordner du verdien til Navn-variabelen. Verdien tilordnes til «Guru99 – ASP.NET

Trinn 5) Gå nå til demo.aspx-filen og legg til kodelinjene for å vise teksten «Guru99 – ASP.NET.

Opprette et .NET-enhetstestingsprosjekt

<!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 Forklaring:-

  1. Den første linjen oppretter et objekt av klassen «Opplæring». Dette er det første trinnet når man arbeider med klasser og objekter. Navnet som gis til objektet er «tp».
  2. Til slutt kaller vi 'tutorial.cs' fra demo.aspx-filen. Den viser verdien til Name-variabelen.

Når du kjører programmet ovenfor i Visual Studio, vil du få følgende utgang.

Produksjon:-

Opprette et .NET-enhetstestingsprosjekt

Fra utdataene ser du meldingen «Guru99 – ASP.NET” vises.

Trinn 6) La oss nå legge til testprosjektet vårt i demoapplikasjonen. Dette gjøres ved hjelp av Visual Studio.

Opprette et .NET-enhetstestingsprosjekt

  1. Høyreklikk på Solution – DemoApplication.
  2. I kontekstmenyen velger du alternativet 'Nytt prosjekt'.

Trinn 7) Trinnet innebærer tillegg av Unit Test-prosjektet til demoapplikasjonen.

Opprette et .NET-enhetstestingsprosjekt

  1. Klikk på elementtype som "Test" fra panelet til venstre.
  2. Velg elementet som 'Unit Test Project' fra listen, som vises i den midtre delen av dialogboksen.
  3. Gi et navn på testprosjektet. I vårt tilfelle er navnet gitt 'DemoTest'.
  4. Til slutt klikker du på 'OK'-knappen.

Du vil etter hvert se DemoTest-prosjektet lagt til i løsningsutforskeren. Med dette kan du også se andre filer som UnitTest1.cs, egenskaper, etc. genereres som standard.

Opprette et .NET-enhetstestingsprosjekt

Kjører testprosjektet

Testprosjektet som ble opprettet i den tidligere delen brukes til å teste ASP.NET-applikasjonen vår. I de følgende trinnene skal vi se hvordan du kjører testprosjektet.

  • Det første trinnet ville være å legge til en referanse til ASP.NET-prosjektet. Dette trinnet utføres slik at testprosjektet har tilgang til ASP.NET-prosjektet.
  • Deretter skriver vi testkoden vår.
  • Til slutt vil vi kjøre testen ved hjelp av Visual Studio.

Trinn 1) For å teste vår demoapplikasjon, må det første testprosjektet referere til demoapplikasjonen. Legg til en referanse til Demo.aspx-løsningen.

Kjører .NET-testprosjektet

  1. Høyreklikk på Demo Test-prosjektet
  2. Velg alternativet Legg til->Referanse fra menyen.

Trinn 2) Det neste trinnet er å legge til en referanse til DemoApplication.

Kjører .NET-testprosjektet

  1. Velg alternativet Prosjekter fra venstre side av dialogboksen
  2. Klikk på avmerkingsboksen ved siden av DemoApplication
  3. Klikk på 'OK'-knappen.

Dette vil tillate et demotest-prosjekt for å teste vår Demo-applikasjon.

Trinn 3) Nå er det på tide å legge til testkoden i testprosjektet vårt.

  • For dette første dobbeltklikk på UnitTest1-filen (UnitTest1-filen legges automatisk til av Visual Studio når testprosjektet opprettes) i Solution Explorer.
  • Dette er filen som skal kjøres for å teste ASP.NET-prosjektet.

Kjører .NET-testprosjektet

Du vil se koden nedenfor lagt til av Visual Studio i UnitTest1.cs-filen. Dette er den grunnleggende koden som trengs for at testprosjektet skal kjøre.

Kjører .NET-testprosjektet

Trinn 4) Neste trinn er å legge til koden som brukes til å teste strengen «Guru99 – ASP.NET.

Kjører .NET-testprosjektet

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. Lag et nytt objekt kalt 'tp' av typen Tutorial
  2. Assert.AreEqual-metoden brukes i .NET for å teste om en verdi er lik noe. Så i vårt tilfelle sammenligner vi verdiene til tp.Name med Guru99 – ASP.NET.

Trinn 5) La oss nå kjøre testprosjektet vårt. For å gjøre dette må vi gå til menyvalget Test->Kjør->Alle tester.

Kjører .NET-testprosjektet

Produksjon:-

Kjører .NET-testprosjektet

Et testutforskervindu vises i Visual Studio. Dette vil vise resultatet ovenfor og vise at en vellykket test ble kjørt i Visual Studio.

MSTest-attributter og påstander du vil bruke

Ocuco MicrosoftNavnerommet .VisualStudio.TestTools.UnitTesting leverer et lite sett med attributter og deklarasjoner som dekker de fleste ASP.NET-enhetstester. Å lære disse først gjør det enklere å lese og vedlikeholde hver senere test.

  • [Testklasse] – markerer klassen som en beholder med tester. MSTest skanner klasser med dette attributtet ved oppdagelsestidspunktet.
  • [Testmetode] – markerer en offentlig, parameterløs metode som en individuell test. Metoden returnerer void, Task eller ValueTask.
  • [TestInitialize] / [TestCleanup] – kjør før og etter hver testmetode. Bruk dem til å opprette og avvikle delt oppsett, for eksempel et simulert repository eller en kontekst i minnet.
  • [KlasseInitialisere] / [KlasseOpprydding] – kjør én gang for hele klassen. De er nyttige når oppsettet er dyrt, for eksempel ved å sette opp en testdatabase.
  • [DataRow] og [DataTestMethod] – levere parameteriserte innganger slik at én enkelt testmetode dekker flere tilfeller.

Inne i hver testmetode sjekker Assert-klassen resultatet. Vanlige kall inkluderer Assert.AreEqual for verdisammenligninger, Assert.IsTrue og Assert.IsFalse for boolske verdier, Assert.IsNull og Assert.IsNotNull for referanser, og Assert.ThrowsException for forventede unntak. Strukturer hver test ved hjelp av Arrange-, Act- og Assert-mønsteret, slik at oppsett, kall og verifisering forblir visuelt atskilt. Dette oppsettet gjør det enkelt å feilsøke mislykkede tester fordi den mislykkede linjen nesten alltid er den eneste Assert-en nederst.

MSTest, NUnit og xUnit sammenlignet for ASP.NET

Tre testrammeverk dominerer .NET-økosystemet. Hvert av dem kjører i Visual Studio og integreres med dotnet-testing, så forskjellen ligger hovedsakelig i stil, fellesskapsstøtte og standardoppførsel.

  • MSTest – sendt av Microsoft og leveres forhåndsinstallert med Visual Studio Unit Test Project-malen som ble brukt tidligere i denne veiledningen. Det er den sikreste standarden når et team er nytt innen enhetstesting på Microsoft stable.
  • NUnit – den eldste av de tre, opprinnelig portert fra JUnitDen tilbyr en rik begrensningsmodell, parameteriserte tester gjennom TestCase og TestCaseSource, og moden støtte på tvers av alle .NET-versjoner.
  • xUnit.net – brukes internt av ASP.NET Core- og Entity Framework Core-teamene. Den erstatter SetUp-metoden med constructor og IDisposable, oppfordrer til én testklasse per oppførsel og bruker [Fact] og [Theory] i stedet for [TestMethod].

Alle tre rammeverkene oppdager tester gjennom attributter, kjører gjennom dotnet test-kommandoen og produserer trx- eller xUnit XML-rapporter som CI-pipelines som Azure DevOps, GitHub-handlinger og Jenkins kan konsumere direkte. For et første ASP.NET-prosjekt, vil det å holde seg til MSTest holde verktøykjeden enkel. Team som ønsker rikere parameterisering eller allerede bruker ASP.NET Core, velger ofte xUnit for konsistens med rammeverket det ble bygget med.

Beste praksis for enhetstesting av ASP.NET-applikasjoner

Å følge et lite sett med vaner holder en pakke rask, pålitelig og nyttig gjennom levetiden til et ASP.NET-prosjekt.

  1. Test én oppførsel per metode. En test som hevder flere urelaterte ting mislykkes av mange grunner og tar lengre tid å fikse.
  2. Navngi tester etter intensjon. Et mønster som MethodUnderTest_Scenario_ExpectedResult gjør Test Explorer-utdataene til en lesbar spesifikasjon av klassen.
  3. Isoler enheten fra eksterne systemer. Pakk fil-, nettverks- og databasekall bak grensesnitt og bytt inn forfalskninger eller simuleringer slik at testen ikke treffer den virkelige avhengigheten.
  4. Hold testene raske. Sikt mot at hele enhetspakken skal være ferdig på sekunder. Trege tester hoppes over, og tester som hoppes over skjuler regresjoner.
  5. Følg oppsettet «Organiser, handle, hevde». Tre korte blokker med blanke linjer mellom seg signaliserer intensjon og gjør det enkelt å få øye på sviktende linjer.
  6. Kjør tester på hver commit. Koble dotnet-testen til en CI-rørledning slik at en ødelagt test blokkerer sammenslåingen i stedet for å sende denping til produksjon.
  7. Track-kodedekning, men ikke jag den. Dekningen fremhever uprøvde stier, men et høyt tall alene garanterer ikke kvalitet. RevSe hva de manglende linjene egentlig gjør.

Når disse metodene brukes sammen, gjør de DemoTest-prosjektet som er bygget ovenfor, om til frøet til en pakke som fanger opp regresjoner ved hver push, dokumenterer atferd for fremtidige utviklere og gir trygghet ved refaktorering av en ASP.NET-applikasjon.

Spørsmål og svar

Ja. GitHub Copilot kan sette opp [TestClass]- og [TestMethod]-blokker, foreslå Arrange Act Assert-oppsett og generere parameteriserte [DataRow]-tilfeller fra en målmetodesignatur. RevSe de genererte påstandene før du stoler på dem i produksjon.

Ja. Maskinlæringsbaserte assistenter kan flagge sprø tester, foreslå bedre navn og fremheve dupliserte oppsett som hører hjemme i [TestInitialize]. De forkorter gjennomgangstiden, men utvikleren eier fortsatt riktigheten av hver assert.

En enhetstest isolerer én klasse eller metode og simulerer dens avhengigheter. En integrasjonstest tester flere komponenter sammen, ofte på en ekte database eller webserver. Enhetstester kjører i millisekunder; integrasjonstester tar lengre tid, men fanger opp koblingsfeil.

Bruk Test Analyse i Visual Studio Enterprise Code Dekning for alle tester. Legg til Coverlet N på andre utgaver.uGet pakke og kjør dotnet-test –collect:”XPlat Code «Dekning» for å produsere en Cobertura XML-rapport.

Pakk avhengigheten bak et grensesnitt og injiser den gjennom konstruktøren. I testen, send en stub eller en mock bygget med biblioteker som Moq eller NSubstitute slik at enheten som testes aldri berører den virkelige databasen eller HTTP-endepunktet.

Kjør dotnet-testen i mappen som inneholder testprosjektet. Kommandoen bygger prosjektet, oppdager alle [TestMethod], kjører dem og skriver ut et sammendrag. CI-systemer som GitHub Actions kaller den samme kommandoen i et arbeidsflyttrinn.

Merk metoden med [DataTestMethod] og legg til ett eller flere [DataRow]-attributter som leverer inngangsverdiene og forventet resultat. MSTest kjører deretter den samme brødteksten én gang per rad, og produserer en egen linje i Test Explorer for hvert tilfelle.

Skriv en mislykket [TestMethod] som beskriver den neste nødvendige oppførselen, legg til akkurat nok produksjonskode til at den består, og refaktorer deretter. Ved å gjenta denne rødgrønne refaktoreringsløkken holder du designet styrt av tester i stedet for omvendt.

Oppsummer dette innlegget med: