ENHEDSTEST i Asp.Net: Komplet vejledning

โšก Smart opsummering

Enhedstestning af en ASP.NET-applikation i Visual Studio starter med et Unit Test Project, forbinder en reference til mรฅlprojektet, tilfรธjer MSTest [TestClass]- og [TestMethod]-attributter og kalder Assert-metoder for at bevise, at klasser opfรธrer sig som designet.

  • ๐Ÿงช Testprojekt: Tilfรธj et enhedstestprojekt til ASP.NET-lรธsningen, og referer til det mรฅlprojekt, du vil verificere.
  • ๐Ÿท๏ธ Attributter: Marker klassen med [TestClass] og hver test med [TestMethod], sรฅ MSTest kan finde dem.
  • โœ… Pรฅstande: Brug Assert.AreEqual, Assert.IsTrue og lignende kald til at deklarere det forventede resultat af hver test.
  • โ–ถ ๏ธ Kรธr tests: Menuen Udfรธr test Kรธr alle tests i Visual Studio, og undersรธg Test Explorer for bestรฅede og ikke-bestรฅede resultater.
  • โš–๏ธ Valg af ramme: MSTest, NUnit og xUnit fungerer alle med dotnet test; MSTest leveres som standard, og xUnit foretrรฆkkes til ASP.NET Core.
  • ๐Ÿ› ๏ธ Bedste praksis: Isoler enheden, fรธlg Arrange Act Assert, og hold hele pakken hurtig, sรฅ den kรธrer ved hver commit.

Enhedstestning i ASP.NET

Test er et vรฆsentligt aspekt af ethvert programmeringssprog. Test For ASP.NET-applikationer er det muligt ved hjรฆlp af Visual Studio.

Visual Studio bruges til at oprette testkode. Det bruges ogsรฅ til at kรธre testkoden til en ASP.NET-applikation. Pรฅ denne mรฅde bliver det nemt at kontrollere for eventuelle fejl i en ASP.NET-applikation. I Visual Studio leveres testmodulet med en standardfunktionalitet. Man kan straks udfรธre en test for et ASP.NET-projekt.

Introduktion til testning for ASP.NET

Det fรธrste niveau i testningen af โ€‹โ€‹et ASP.NET-projekt er testning pรฅ enhedsniveau. Denne test af et programs funktionalitet. Testningen udfรธres for at sikre, at programmet opfรธrer sig som forventet. I ASP.NET er den fรธrste opgave at oprette et testprojekt i Visual Studio. Testprojektet vil indeholde den nรธdvendige kode til at teste programmet.

Lad os se pรฅ nedenstรฅende webside. Pรฅ siden har vi beskeden "Guru99 โ€“ ASP.NETโ€ vises. Hvordan kan vi nu bekrรฆfte, at den korrekte meddelelse vises, nรฅr et ASP.NET-projekt kรธrer? Dette gรธres ved at tilfรธje et testprojekt til ASP.NET-lรธsningen (bruges til at udvikle webbaserede applikationer). Dette testprojekt vil sikre, at den korrekte meddelelse vises til brugeren.

Introduktion til testning for ASP.NET

Lad os nu se nรฆrmere pรฅ det og se, hvordan vi kan arbejde med test i ASP.NET.

Oprettelse af et .NET-enhedstestprojekt

Fรธr vi opretter et testprojekt, skal vi udfรธre nedenstรฅende trin pรฅ hรธjt niveau.

  1. Brug vores 'DemoApplication' brugt i de tidligere afsnit. Dette vil vรฆre vores applikation, som skal testes.
  2. Vi tilfรธjer en ny klasse til DemoApplication. Denne klasse vil indeholde en streng kaldet 'Guru99 โ€“ ASP.NET.' Denne streng vil blive testet i vores testprojekt.
  3. Til sidst opretter vi et testprojekt. Dette bruges til at teste ASP.NET-applikationen.

Sรฅ lad os fรธlge ovenstรฅende trin pรฅ overordnet niveau og se, hvordan man implementerer testning.

Trin 1) Sรธrg for, at DemoApplication er รฅben i Visual Studio.

Trin 2) Lad os nu tilfรธje en ny klasse til DemoApplication. Denne klasse vil indeholde en streng kaldet 'Guru99 โ€“ ASP.NET.' Denne streng vil blive testet i vores testprojekt.

Fรธlg nedenstรฅende trin for at tilfรธje en ny klasse.

Oprettelse af et .NET-enhedstestprojekt

  1. I Visual Studio skal du hรธjreklikke pรฅ 'DemoApplication' i Solution Explorer.
  2. Vรฆlg indstillingen Tilfรธj->Klasse fra kontekstmenuen.

Trin 3) I dette trin,

Oprettelse af et .NET-enhedstestprojekt

  1. Giv et navn 'Tutorial.cs' til den nye klasse.
  2. Klik pรฅ knappen 'Tilfรธj' for at tilfรธje filen til DemoApplication.

Nu tilfรธjes en ny klasse til filen "DemoApplication."

Trin 4) ร…bn den nye Tutorial.cs-fil fra โ€œDemoApplicationโ€. Tilfรธj strengen โ€œGuru99 โ€“ ASP.NET.โ€

For at รฅbne filen skal du dobbeltklikke pรฅ filen Tutorial.cs i Solution Explorer.

Oprettelse af et .NET-enhedstestprojekt

Filen vil have en eller anden standardkode allerede skrevet. Du skal ikke bekymre dig om den kode, bare tilfรธje nedenstรฅende kodelinje.

Oprettelse af et .NET-enhedstestprojekt

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

Code Forklaring:-

  1. Navnevariablen er af typen streng.
  2. Til sidst, i konstruktรธren af โ€‹โ€‹Tutorial-klassen, tildeles vรฆrdien af โ€‹โ€‹Navn-variablen. Vรฆrdien tildeles til โ€œGuru99 โ€“ ASP.NETโ€

Trin 5) Gรฅ nu til demo.aspx-filen og tilfรธj kodelinjerne for at vise teksten "Guru99 โ€“ ASP.NET.โ€

Oprettelse af et .NET-enhedstestprojekt

<!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 linje opretter et objekt af klassen 'Tutorial'. Dette er det fรธrste trin, nรฅr man arbejder med klasser og objekter. Navnet pรฅ objektet er 'tp'.
  2. Til sidst kalder vi 'tutorial.cs' fra filen demo.aspx. Den viser vรฆrdien af โ€‹โ€‹Name-variablen.

Nรฅr du kรธrer ovenstรฅende program i Visual Studio, fรฅr du fรธlgende output.

Produktion:-

Oprettelse af et .NET-enhedstestprojekt

Fra outputtet ser du meddelelsen "Guru99 โ€“ ASP.NETโ€ vises.

Trin 6) Lad os nu tilfรธje vores testprojekt til demoapplikationen. Dette gรธres ved hjรฆlp af Visual Studio.

Oprettelse af et .NET-enhedstestprojekt

  1. Hรธjreklik pรฅ Solution โ€“ DemoApplication.
  2. I kontekstmenuen skal du vรฆlge muligheden 'Nyt projekt'.

Trin 7) Trinet involverer tilfรธjelsen af โ€‹โ€‹Unit Test-projektet til demoapplikationen.

Oprettelse af et .NET-enhedstestprojekt

  1. Klik pรฅ elementtype som 'Test' fra panelet til venstre.
  2. Vรฆlg punktet som 'Unit Test Project' fra listen, som vises i den midterste del af dialogboksen.
  3. Giv et navn til testprojektet. I vores tilfรฆlde er navnet 'DemoTest'.
  4. Klik til sidst pรฅ knappen 'OK'.

Du vil til sidst se DemoTest-projektet tilfรธjet til lรธsningsudforskeren. Med dette kan du ogsรฅ se andre filer som UnitTest1.cs, egenskaber osv. genereres som standard.

Oprettelse af et .NET-enhedstestprojekt

Afvikling af testprojektet

Testprojektet, der blev oprettet i det tidligere afsnit, bruges til at teste vores ASP.NET-applikation. I de fรธlgende trin vil vi se pรฅ, hvordan man kรธrer testprojektet.

  • Det fรธrste trin ville vรฆre at tilfรธje en reference til ASP.NET-projektet. Dette trin udfรธres, sรฅ testprojektet har adgang til ASP.NET-projektet.
  • Sรฅ skriver vi vores testkode.
  • Til sidst vil vi kรธre testen ved hjรฆlp af Visual Studio.

Trin 1) For at teste vores demoapplikation skal det fรธrste testprojekt referere til demoapplikationen. Tilfรธj en reference til Demo.aspx-lรธsningen.

Kรธrsel af .NET-testprojektet

  1. Hรธjreklik pรฅ Demo Test-projektet
  2. Fra menuen vรฆlges indstillingen Tilfรธj->Reference.

Trin 2) Det nรฆste trin er at tilfรธje en reference til DemoApplication.

Kรธrsel af .NET-testprojektet

  1. Vรฆlg indstillingen Projekter i venstre side af dialogboksen
  2. Klik pรฅ afkrydsningsfeltet ud for DemoApplication
  3. Klik pรฅ knappen 'OK'.

Dette vil give et demotest-projekt mulighed for at teste vores DemoApplication.

Trin 3) Nu er det tid til at tilfรธje testkoden til vores testprojekt.

  • For dette fรธrste dobbeltklik pรฅ UnitTest1-filen (UnitTest1-filen tilfรธjes automatisk af Visual Studio, nรฅr testprojektet oprettes) i Solution Explorer.
  • Dette er den fil, der vil blive kรธrt for at teste ASP.NET-projektet.

Kรธrsel af .NET-testprojektet

Du vil se nedenstรฅende kode tilfรธjet af Visual Studio i filen UnitTest1.cs. Dette er den grundlรฆggende kode, der er nรธdvendig for, at testprojektet kan kรธre.

Kรธrsel af .NET-testprojektet

Trin 4) Det nรฆste trin er at tilfรธje den kode, der bruges til at teste strengen "Guru99 โ€“ ASP.NET.โ€

Kรธrsel af .NET-testprojektet

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. Opret et nyt objekt kaldet 'tp' af typen Tutorial
  2. Assert.AreEqual-metoden bruges i .NET til at teste, om en vรฆrdi er lig med noget. Sรฅ i vores tilfรฆlde sammenligner vi vรฆrdierne af tp.Name med Guru99 โ€“ ASP.NET.

Trin 5) Lad os nu kรธre vores testprojekt. Til dette skal vi gรฅ til menupunktet Test->Kรธr->Alle tests.

Kรธrsel af .NET-testprojektet

Produktion:-

Kรธrsel af .NET-testprojektet

Et test Explorer-vindue vises i Visual Studio. Dette vil vise ovenstรฅende resultat og vise, at en vellykket test blev kรธrt i Visual Studio.

MSTest-attributter og pรฅstande, du vil bruge

MicrosoftNavneomrรฅdet .VisualStudio.TestTools.UnitTesting indeholder et lille sรฆt attributter og assertions, der dรฆkker de fleste ASP.NET-enhedstests. Ved at lรฆre disse fรธrst bliver det nemmere at lรฆse og vedligeholde alle senere tests.

  • [Testklasse] โ€“ markerer klassen som en beholder med tests. MSTest scanner klasser med denne attribut pรฅ opdagelsestidspunktet.
  • [Testmetode] โ€“ markerer en offentlig, parameterlรธs metode som en individuel test. Metoden returnerer void, Task eller ValueTask.
  • [TestInitialize] / [TestCleanup] โ€“ kรธre fรธr og efter hver testmetode. Brug dem til at oprette og slette delte opsรฆtninger, sรฅsom et mock-arkiv eller en in-memory-kontekst.
  • [KlasseInitialisere] / [KlasseOprydning] โ€“ kรธres รฉn gang for hele klassen. De er nyttige, nรฅr opsรฆtningen er dyr, for eksempel ved oprettelse af en testdatabase.
  • [DataRow] og [DataTestMethod] โ€“ levere parametriserede input, sรฅ en enkelt testmetode dรฆkker flere tilfรฆlde.

Inden for hver testmetode kontrollerer Assert-klassen resultatet. Almindelige kald inkluderer Assert.AreEqual for vรฆrdisammenligninger, Assert.IsTrue og Assert.IsFalse for boolske vรฆrdier, Assert.IsNull og Assert.IsNotNull for referencer og Assert.ThrowsException for forventede undtagelser. Strukturer hver test ved hjรฆlp af Arrange-, Act- og Assert-mรธnsteret, sรฅ opsรฆtning, kald og verifikation forbliver visuelt adskilt. Dette layout gรธr det nemt at fejlfinde fejlende tests, fordi den fejlende linje nรฆsten altid er den eneste Assert i bunden.

MSTest, NUnit og xUnit sammenlignet for ASP.NET

Tre testframeworks dominerer .NET-รธkosystemet. Hvert framework kรธrer i Visual Studio og integreres med dotnet-test, sรฅ forskellen ligger primรฆrt i stil, fรฆllesskabsstรธtte og standardadfรฆrd.

  • MSTest โ€“ sendt af Microsoft og leveres forudinstalleret med Visual Studio Unit Test Project-skabelonen, der blev brugt tidligere i denne vejledning. Det er den sikreste standard, nรฅr et team er nyt inden for enhedstestning pรฅ Microsoft stak.
  • NUnit โ€“ den รฆldste af de tre, oprindeligt porteret fra JUnitDen tilbyder en omfattende begrรฆnsningsmodel, parametriserede tests via TestCase og TestCaseSource og moden understรธttelse pรฅ tvรฆrs af alle .NET-versioner.
  • xUnit.net โ€“ bruges internt af ASP.NET Core- og Entity Framework Core-teams. Den erstatter SetUp-metoden med constructor og IDisposable, opfordrer til รฉn testklasse pr. adfรฆrd og bruger [Fact] og [Theory] i stedet for [TestMethod].

Alle tre frameworks opdager tests via attributter, kรธrer via dotnet test-kommandoen og producerer trx- eller xUnit XML-rapporter, som CI-pipelines som f.eks. Azure DevOps, GitHub-handlinger og Jenkins kan forbruge direkte. For et fรธrste ASP.NET-projekt holder det vรฆrktรธjskรฆden enkel, hvis man holder sig til MSTest. Teams, der รธnsker mere omfattende parametrisering eller allerede bruger ASP.NET Core, vรฆlger ofte xUnit for at sikre konsistens med det framework, det blev bygget med.

Bedste fremgangsmรฅder til enhedstestning af ASP.NET-applikationer

At fรธlge et lille sรฆt vaner holder en suite hurtig, pรฅlidelig og nyttig i lรธbet af et ASP.NET-projekts levetid.

  1. Test รฉn adfรฆrd pr. metode. En test, der pรฅstรฅr flere uafhรฆngige ting, fejler af mange รฅrsager og tager lรฆngere tid at rette.
  2. Navngiv tests efter hensigt. Et mรธnster som MethodUnderTest_Scenario_ExpectedResult gรธr Test Explorer-outputtet til en lรฆsbar specifikation af klassen.
  3. Isoler enheden fra eksterne systemer. Indpak fil-, netvรฆrks- og databasekald bag grรฆnseflader og byt ind med forfalskninger eller mock-funktioner, sรฅ testen ikke rammer den reelle afhรฆngighed.
  4. Hold testene hurtige. Sigt efter at hele enhedspakken skal vรฆre fรฆrdig pรฅ fรฅ sekunder. Langsomme tests springes over, og oversprungne tests skjuler regressioner.
  5. Fรธlg layoutet "Arranger, Handl, hรฆvd". Tre korte blokke med blanke linjer imellem signalerer hensigt og gรธr det nemt at fรฅ รธje pรฅ fejlende linjer.
  6. Kรธr tests pรฅ hver commit. Kable dotnet-test til en CI-pipeline, sรฅ en defekt test blokerer sammenfรธjningen i stedet for afsendelsenping til produktion.
  7. Track-kodedรฆkning, men jagt den ikke. Dรฆkningen fremhรฆver uafprรธvede stier, men et hรธjt antal alene garanterer ikke kvalitet. RevSe hvad de manglende linjer rent faktisk gรธr.

Anvendt sammen forvandler disse fremgangsmรฅder det ovenfor bygget DemoTest-projekt til kimen til en suite, der fanger regressioner ved hvert push, dokumenterer adfรฆrd for fremtidige udviklere og giver tryghed ved refaktorering af en ASP.NET-applikation.

Ofte Stillede Spรธrgsmรฅl

Ja. GitHub Copilot kan scaffolde [TestClass]- og [TestMethod]-blokke, foreslรฅ Arrange Act Assert-layouts og generere parametriserede [DataRow]-tilfรฆlde fra en mรฅlmetodesignatur. RevSe de genererede pรฅstande, fรธr du stoler pรฅ dem i produktion.

Ja. Maskinlรฆringsbaserede assistenter kan markere skrรธbelige tests, foreslรฅ bedre navne og fremhรฆve duplikerede opsรฆtninger, der hรธrer hjemme i [TestInitialize]. De forkorter gennemgangstiden, men udvikleren ejer stadig rigtigheden af โ€‹โ€‹hver Assert.

En enhedstest isolerer รฉn klasse eller metode og simulerer dens afhรฆngigheder. En integrationstest udfรธrer flere komponenter sammen og rammer ofte en rigtig database eller webserver. Enhedstests kรธrer pรฅ millisekunder; integrationstests tager lรฆngere tid, men opdager fejl i ledningsfรธringen.

I Visual Studio Enterprise skal du bruge Test Analyse Code Dรฆkning for alle tests. Tilfรธj Coverlet N pรฅ andre udgaver.uGet pakke og kรธre dotnet test โ€“collect:โ€XPlat Code "Dรฆkning" for at producere en Cobertura XML-rapport.

Pakk afhรฆngigheden bag en grรฆnseflade og injicer den gennem konstruktรธren. I testen skal du sende en stub eller en mock bygget med biblioteker som Moq eller NSubstitute, sรฅ den enhed, der testes, aldrig rรธrer den rigtige database eller HTTP-slutpunkt.

Kรธr dotnet test i den mappe, der indeholder testprojektet. Kommandoen opbygger projektet, registrerer alle [TestMethod], udfรธrer dem og udskriver et resumรฉ. CI-systemer som GitHub Actions kalder den samme kommando i et arbejdsgangstrin.

Marker metoden med [DataTestMethod] og tilfรธj en eller flere [DataRow]-attributter, der leverer inputvรฆrdierne og det forventede resultat. MSTest kรธrer derefter den samme tekst รฉn gang pr. rรฆkke og producerer en separat linje i Test Explorer for hvert tilfรฆlde.

Skriv en fejlende [TestMethod], der beskriver den nรฆste krรฆvede adfรฆrd, tilfรธj lige nok produktionskode til at den bestรฅs, og refaktorรฉr derefter. Gentagelse af denne rรธdgrรธnne refaktoreringslรธkke holder designet styret af tests i stedet for omvendt.

Opsummer dette indlรฆg med: