EENHEID TESTEN in Asp.Net: volledige zelfstudie

โšก Slimme samenvatting

Unit testen van een ASP.NET-applicatie in Visual Studio begint met een Unit Test Project, legt een verwijzing naar het doelproject, voegt MSTest [TestClass] en [TestMethod] attributen toe en roept Assert-methoden aan om te bewijzen dat klassen zich gedragen zoals bedoeld.

  • ๐Ÿงช Testproject: Voeg een unit-testproject toe aan de ASP.NET-oplossing en verwijs naar het doelproject dat u wilt verifiรซren.
  • ???? ๏ธ Attributen: Markeer de klasse met [TestClass] en elke test met [TestMethod] zodat MSTest ze kan vinden.
  • โœ… Beweringen: Gebruik Assert.AreEqual, Assert.IsTrue en vergelijkbare aanroepen om de verwachte uitkomst van elke test te declareren.
  • โ–ถ ๏ธ Tests uitvoeren: Ga in Visual Studio naar het menu 'Test uitvoeren' en vervolgens naar 'Alle tests uitvoeren'. Bekijk de Testverkenner voor geslaagde en mislukte resultaten.
  • โ€‹ Keuze van framework: MSTest, NUnit en xUnit werken allemaal met dotnet test; MSTest wordt standaard meegeleverd, xUnit heeft de voorkeur voor ASP.NET Core.
  • ๏ธ Beste oefening: Isoleer de unit, volg de Arrange Act Assert-methode en zorg ervoor dat de volledige suite snel blijft, zodat deze bij elke commit wordt uitgevoerd.

Unit testen in ASP.NET

Testen is een essentieel aspect van elke programmeertaal. Testen Voor ASP.NET-applicaties is dit mogelijk met behulp van Visual Studio.

Visual Studio wordt gebruikt om testcode te maken. Het wordt ook gebruikt om de testcode voor een ASP.NET-applicatie uit te voeren. Op deze manier wordt het eenvoudig om fouten in een ASP.NET-applicatie op te sporen. De testmodule in Visual Studio biedt standaardfunctionaliteit. Je kunt direct een test uitvoeren voor een ASP.NET-project.

Inleiding tot testen voor ASP.NET

Het eerste niveau van testen van een ASP.NET-project is unit-testen. Deze testen controleren de functionaliteit van een applicatie. De testen worden uitgevoerd om ervoor te zorgen dat de applicatie zich gedraagt โ€‹โ€‹zoals verwacht. In ASP.NET is de eerste stap het maken van een testproject in Visual Studio. Dit testproject bevat de benodigde code om de applicatie te testen.

Laten we de onderstaande webpagina eens bekijken. Op de pagina staat de volgende boodschap:Guru99 โ€“ ASP.NETโ€ wordt weergegeven. Hoe kunnen we nu bevestigen dat het juiste bericht wordt weergegeven wanneer een ASP.NET-project wordt uitgevoerd? Dit doen we door een testproject toe te voegen aan de ASP.NET-oplossing (die wordt gebruikt voor het ontwikkelen van webapplicaties). Dit testproject zorgt ervoor dat het juiste bericht aan de gebruiker wordt getoond.

Inleiding tot testen voor ASP.NET

Laten we nu eens dieper ingaan op de mogelijkheden van testen in ASP.NET.

Een .NET Unit Testing-project maken

Voordat we een testproject maken, moeten we de onderstaande stappen op hoog niveau uitvoeren.

  1. Gebruik onze 'DemoApplicatie' die in de eerdere secties werd gebruikt. Dit wordt onze applicatie die getest moet worden.
  2. We voegen een nieuwe klasse toe aan de DemoApplication. Deze klasse bevat een string met de naam 'Guru99 โ€“ ASP.NET.' Deze tekenreeks wordt getest in ons testproject.
  3. Tot slot maken we een testproject aan. Dit project wordt gebruikt om de ASP.NET-applicatie te testen.

Laten we daarom de bovenstaande stappen op hoog niveau volgen en kijken hoe we testen kunnen implementeren.

Stap 1) Zorg ervoor dat de DemoApplication geopend is in Visual Studio.

Stap 2) Laten we nu een nieuwe klasse toevoegen aan de DemoApplication. Deze klasse zal een tekenreeks bevatten met de naam 'Guru99 โ€“ ASP.NET.' Deze tekenreeks wordt getest in ons testproject.

Volg onderstaande stap om een โ€‹โ€‹nieuwe klasse toe te voegen.

Een .NET Unit Testing-project maken

  1. Klik in Visual Studio met de rechtermuisknop op 'DemoApplication' in Solution Explorer.
  2. Kies de optie Toevoegen->Klasse in het contextmenu.

Stap 3) In deze stap,

Een .NET Unit Testing-project maken

  1. Geef een naam 'Tutorial.cs' voor de nieuwe klasse.
  2. Klik op de knop 'Toevoegen' om het bestand aan de demoapplicatie toe te voegen.

Nu is er een nieuwe klasse toegevoegd aan het bestand 'DemoApplication'.

Stap 4) Open het nieuwe bestand Tutorial.cs vanuit โ€œDemoApplicationโ€. Voeg de volgende tekst toe:Guru99 โ€“ ASP.NET.โ€

Om het bestand te openen, dubbelklikt u op het bestand Tutorial.cs in Solution Explorer.

Een .NET Unit Testing-project maken

In het bestand is al een standaardcode geschreven. Maak je geen zorgen over die code, voeg gewoon de onderstaande regel code toe.

Een .NET Unit Testing-project maken

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

Code Uitleg:-

  1. De variabele Naam is van het type string.
  2. Tot slot, in de constructor van de Tutorial-klasse, wijs je de waarde toe aan de variabele Name. De waarde wordt toegewezen aan "Guru99 โ€“ ASP.NETโ€

Stap 5) Ga nu naar het bestand demo.aspx en voeg de volgende regels code toe om de tekst " weer te geven" te creรซren.Guru99 โ€“ ASP.NET.โ€

Een .NET Unit Testing-project maken

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

  1. De eerste regel creรซert een object van de klasse 'Tutorial'. Dit is de eerste stap bij het werken met klassen en objecten. De naam die aan het object wordt gegeven is 'tp'.
  2. Ten slotte roepen we 'tutorial.cs' aan vanuit het demo.aspx-bestand. Het toont de waarde van de naamvariabele.

Wanneer u het bovenstaande programma in Visual Studio uitvoert, krijgt u de volgende uitvoer.

Uitgang: -

Een .NET Unit Testing-project maken

Uit de uitvoer blijkt het bericht "Guru99 โ€“ ASP.NETโ€ weergegeven.

Stap 6) Laten we nu ons testproject toevoegen aan de demo-applicatie. Dit doen we met behulp van Visual Studio.

Een .NET Unit Testing-project maken

  1. Klik met de rechtermuisknop op de oplossing โ€“ Demotoepassing.
  2. Kies in het contextmenu de optie 'Nieuw project'.

Stap 7) De stap omvat de toevoeging van het Unit Test-project aan de demo-applicatie.

Een .NET Unit Testing-project maken

  1. Klik op het itemtype als 'Test' in het linkerpaneel.
  2. Selecteer het item 'Unit Test Project' uit de lijst die in het midden van het dialoogvenster wordt weergegeven.
  3. Geef een naam voor het testproject. In ons geval is de opgegeven naam 'DemoTest'.
  4. Klik ten slotte op de knop 'OK'.

Uiteindelijk zult u zien dat het DemoTest-project wordt toegevoegd aan de oplossingsverkenner. Hiermee kunt u ook zien dat andere bestanden zoals UnitTest1.cs, eigenschappen, enz. standaard worden gegenereerd.

Een .NET Unit Testing-project maken

Het uitvoeren van het testproject

Het testproject dat in de vorige sectie is gemaakt, wordt gebruikt om onze ASP.NET-applicatie te testen. In de volgende stappen zullen we zien hoe we het testproject kunnen uitvoeren.

  • De eerste stap is het toevoegen van een verwijzing naar het ASP.NET-project. Deze stap zorgt ervoor dat het testproject toegang heeft tot het ASP.NET-project.
  • Vervolgens schrijven we onze testcode.
  • Tot slot voeren we de test uit met Visual Studio.

Stap 1) Om onze demo-applicatie te testen, moet het eerste testproject verwijzen naar de demo-applicatie. Voeg een verwijzing toe naar de Demo.aspx-oplossing.

Het .NET-testproject uitvoeren

  1. Klik met de rechtermuisknop op het Demo Test-project
  2. Kies in het menu de optie Toevoegen->Referentie.

Stap 2) De volgende stap is het toevoegen van een verwijzing naar de DemoApplication.

Het .NET-testproject uitvoeren

  1. Selecteer de optie Projecten aan de linkerkant van het dialoogvenster
  2. Klik op het selectievakje naast DemoApplication
  3. Klik op de knop 'OK'.

Hierdoor kan een demotestproject onze demoapplicatie testen.

Stap 3) Nu is het tijd om de testcode aan ons testproject toe te voegen.

  • Dubbelklik hiervoor eerst op het bestand UnitTest1 (het bestand UnitTest1 wordt automatisch toegevoegd door Visual Studio wanneer het testproject wordt gemaakt) in Solution Explorer.
  • Dit is het bestand dat wordt uitgevoerd om het ASP.NET-project te testen.

Het .NET-testproject uitvoeren

U ziet de onderstaande code toegevoegd door Visual Studio in het bestand UnitTest1.cs. Dit is de basiscode die nodig is om het testproject uit te voeren.

Het .NET-testproject uitvoeren

Stap 4) De volgende stap is het toevoegen van de code die wordt gebruikt om de tekenreeks te testen.Guru99 โ€“ ASP.NET.โ€

Het .NET-testproject uitvoeren

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. Maak een nieuw object met de naam 'tp' van het type Tutorial
  2. De Assert.AreEqual-methode wordt in .NET gebruikt om te testen of een waarde gelijk is aan iets. In ons geval vergelijken we dus de waarden van tp.Name met Guru99 โ€“ ASP.NET.

Stap 5) Laten we nu ons testproject uitvoeren. Hiervoor moeten we naar de menuoptie Test->Uitvoeren->Alle tests gaan.

Het .NET-testproject uitvoeren

Uitgang: -

Het .NET-testproject uitvoeren

Er verschijnt een test Explorer-venster in Visual Studio. Dit toont het bovenstaande resultaat en geeft aan dat er een succesvolle test is uitgevoerd in Visual Studio.

MSTest-attributen en -assertions die u zult gebruiken

De MicrosoftDe namespace .VisualStudio.TestTools.UnitTesting bevat een kleine set attributen en beweringen die de meeste ASP.NET-unit tests dekken. Door deze eerst te leren, worden alle latere tests gemakkelijker te lezen en te onderhouden.

  • [TestClass] โ€“ markeert de klasse als een container voor tests. MSTest scant klassen met dit attribuut tijdens de ontdekking.
  • [Testmethode] โ€“ markeert een openbare methode zonder parameters als een individuele test. De methode retourneert void, Task of ValueTask.
  • [TestInitialize] / [TestCleanup] โ€“ Voer deze commando's uit vรณรณr en na elke testmethode. Gebruik ze om gedeelde omgevingen zoals een mock-repository of een in-memory context te creรซren en te verwijderen.
  • [ClassInitialize] / [ClassCleanup] โ€“ Voer dit eenmalig uit voor de hele klas. Ze zijn handig wanneer de installatie veel tijd in beslag neemt, bijvoorbeeld bij het vullen van een testdatabase.
  • [DataRow] en [DataTestMethod] โ€“ lever geparameteriseerde invoer zodat รฉรฉn testmethode meerdere gevallen dekt.

Binnen elke testmethode controleert de Assert-klasse de uitkomst. Veelvoorkomende aanroepen zijn Assert.AreEqual voor waardevergelijkingen, Assert.IsTrue en Assert.IsFalse voor booleaanse waarden, Assert.IsNull en Assert.IsNotNull voor referenties en Assert.ThrowsException voor verwachte uitzonderingen. Structureer elke test volgens het Arrange, Act, Assert-patroon, zodat de opzet, aanroep en verificatie visueel gescheiden blijven. Deze structuur maakt het debuggen van falende tests eenvoudig, omdat de foutieve regel bijna altijd de enkele Assert onderaan is.

MSTest, NUnit en xUnit vergeleken voor ASP.NET

Drie testframeworks domineren het .NET-ecosysteem. Ze draaien alle drie binnen Visual Studio en integreren met dotnet test, waardoor de verschillen voornamelijk zitten in stijl, communityondersteuning en standaardgedrag.

  • MSTest โ€“ verzonden door Microsoft en wordt geleverd met de vooraf geรฏnstalleerde Visual Studio Unit Test Project-sjabloon die eerder in deze handleiding is gebruikt. Dit is de veiligste standaardoptie wanneer een team nieuw is in unit-testen. Microsoft stack.
  • NUn โ€“ de oudste van de drie, oorspronkelijk overgezet vanuit JUnitHet biedt een uitgebreid constraintmodel, geparameteriseerde tests via TestCase en TestCaseSource, en volwaardige ondersteuning voor elke .NET-versie.
  • xUnit.net โ€“ intern gebruikt door de ASP.NET Core- en Entity Framework Core-teams. Het vervangt de SetUp-methode door een constructor en IDisposable, stimuleert รฉรฉn testklasse per gedrag en gebruikt [Fact] en [Theory] in plaats van [TestMethod].

Alle drie de frameworks detecteren tests via attributen, voeren ze uit met het `dotnet test` commando en produceren `trx` of `xUnit` XML-rapporten die CI-pipelines zoals Azure DevOps, GitHub Actions en Jenkins kan direct worden gebruikt. Voor een eerste ASP.NET-project is het verstandig om bij MSTest te blijven, omdat de toolchain dan eenvoudig blijft. Teams die meer mogelijkheden voor parameterisering willen of al ASP.NET Core gebruiken, kiezen vaak voor xUnit vanwege de consistentie met het framework waarmee het is ontwikkeld.

Beste werkwijzen voor unit-testen van ASP.NET-applicaties

Door een paar vaste gewoontes te volgen, blijft een softwarepakket snel, betrouwbaar en bruikbaar gedurende de hele levensduur van een ASP.NET-project.

  1. Test รฉรฉn gedragspatroon per methode. Een test die meerdere ongerelateerde zaken beweert, faalt om vele redenen en het duurt langer om dit te herstellen.
  2. Benoem de tests op basis van het beoogde doel. Een patroon zoals MethodUnderTest_Scenario_ExpectedResult zorgt ervoor dat de uitvoer van Test Explorer een leesbare specificatie van de klasse weergeeft.
  3. Isoleer het apparaat van externe systemen. Plaats aanroepen naar bestanden, netwerken en databases achter interfaces en vervang deze door nep- of mock-objecten, zodat de test de werkelijke afhankelijkheid niet aanroept.
  4. Houd de tests snel. Streef ernaar dat de volledige testsuite binnen enkele seconden is afgerond. Langzame tests worden overgeslagen, en overgeslagen tests verbergen regressies.
  5. Volg de Arrange, Act, Assert-methode. Drie korte blokken met lege regels ertussen geven de bedoeling aan en maken foutieve regels gemakkelijk te herkennen.
  6. Voer tests uit bij elke commit. Integreer `dotnet test` in een CI-pipeline, zodat een defecte test de samenvoeging blokkeert in plaats van de implementatie.ping naar productie.
  7. Track code coverage, maar jaag het niet na. De dekkingsgraad brengt ongeteste paden aan het licht, maar een hoog aantal alleen garandeert geen kwaliteit. RevBekijk wat de ontbrekende regels precies doen.

Door deze werkwijzen te combineren, wordt het hierboven gebouwde DemoTest-project de basis voor een suite die regressies bij elke push detecteert, gedrag documenteert voor toekomstige ontwikkelaars en vertrouwen geeft bij het refactoren van een ASP.NET-applicatie.

Veelgestelde vragen

Ja. GitHub Copilot kan [TestClass]- en [TestMethod]-blokken genereren, Arrange Act Assert-layouts voorstellen en geparameteriseerde [DataRow]-cases genereren op basis van een methodesignatuur. RevBekijk de gegenereerde beweringen voordat u ze in productie vertrouwt.

Ja. Op machine learning gebaseerde assistenten kunnen kwetsbare tests signaleren, betere namen voorstellen en dubbele configuraties markeren die in [TestInitialize] thuishoren. Ze verkorten de reviewtijd, maar de ontwikkelaar blijft verantwoordelijk voor de correctheid van elke Assert.

Een unit-test isoleert รฉรฉn klasse of methode en simuleert de afhankelijkheden ervan. Een integratietest test meerdere componenten samen, waarbij vaak een echte database of webserver wordt aangesproken. Unit-tests duren milliseconden; integratietests duren langer, maar sporen fouten in de koppeling op.

Gebruik in Visual Studio Enterprise de functie Testanalyse. Code Dekking voor alle toetsen. Voeg bij andere edities de Coverlet N toe.uGet Verpak het pakket en voer `dotnet test โ€“collect:โ€XPlat` uit. Code "Dekking" om een โ€‹โ€‹te produceren Cobertura XML-rapport.

Verpak de afhankelijkheid in een interface en injecteer deze via de constructor. Geef in de test een stub of een mock door die is gemaakt met bibliotheken zoals Moq of NSubstitute, zodat de te testen eenheid nooit de echte database of het HTTP-eindpunt aanraakt.

Voer `dotnet test` uit in de map die het testproject bevat. De opdracht bouwt het project, detecteert alle `[TestMethod]`-methoden, voert ze uit en print een samenvatting. CI-systemen zoals GitHub Actions roepen dezelfde opdracht aan binnen een workflowstap.

Markeer de methode met [DataTestMethod] en voeg een of meer [DataRow]-attributen toe die de invoerwaarden en het verwachte resultaat bevatten. MSTest voert vervolgens dezelfde code รฉรฉn keer per rij uit, waardoor voor elk geval een aparte regel in de Test Explorer verschijnt.

Schrijf een falende [TestMethode] die het volgende vereiste gedrag beschrijft, voeg net genoeg productiecode toe om deze te laten slagen, en refactor vervolgens. Door deze rood-groen refactor-cyclus te herhalen, blijft het ontwerp gestuurd door tests in plaats van andersom.

Vat dit bericht samen met: