ÜHIKUTE TESTIMINE Asp.Netis: täielik õpetus

⚡ Nutikas kokkuvõte

ASP.NET-i rakenduse ühiktestimine Visual Studios algab ühiktesti projektiga, ühendatakse viide sihtprojektiga, lisatakse MSTest [TestClass] ja [TestMethod] atribuudid ning kutsutakse välja Assert-meetodeid, et tõestada klasside kavandatud käitumist.

  • 🧪 Testprojekt: Lisa ASP.NET lahendusele ühiktesti projekt ja viita sihtprojektile, mida soovid kontrollida.
  • ???? ️ Omadused: Märgi klass [TestClass]-iga ja iga test [TestMethod]-iga, et MSTest saaks need avastada.
  • Väited: Kasutage iga testi oodatava tulemuse deklareerimiseks Assert.AreEqual, Assert.IsTrue ja sarnaseid käske.
  • ▶ ️ Käivita testid: Menüü „Käivita test“ Käivita kõik testid Visual Studios ja kontrolli testide uurijat, kas tulemused on positiivsed või negatiivsed.
  • 🇧🇷 Raamistiku valik: MSTest, NUnit ja xUnit töötavad kõik dotnet testiga; MSTest on vaikimisi kaasas, xUnit on eelistatud ASP.NET Core'i jaoks.
  • 🛠️ Parim harjutus: Isoleeri üksus, järgi Arrange Act Assert käsku ja hoia kogu komplekt kiirena, et see töötaks iga commit'i korral.

Ühiktestimine ASP.NET-is

Testimine on iga programmeerimiskeele oluline aspekt. Testimine ASP.NET rakenduste jaoks on see võimalik Visual Studio abil.

Visual Studiot kasutatakse testkoodi loomiseks. Seda kasutatakse ka ASP.NET-i rakenduse testkoodi käivitamiseks. Sel viisil on ASP.NET-i rakenduses vigade kontrollimine lihtne. Visual Studios on testimismoodulil valmisfunktsioonid. ASP.NET-i projekti saab kohe testida.

Sissejuhatus ASP.NET-i testimisse

ASP.NET-i projekti testimise esimene tase on ühikutaseme testimine. See test on rakenduse funktsionaalsuse test. Testimise eesmärk on tagada rakenduse ootuspärane käitumine. ASP.NET-is on esimene ülesanne luua Visual Studios testprojekt. Testprojekt sisaldab rakenduse testimiseks vajalikku koodi.

Vaatleme allolevat veebilehte. Lehel on meil teade „Guru99 – ASP.NET”. Kuidas saame nüüd kinnitada, et ASP.NET-projekti käivitamisel kuvatakse õige teade? Selleks lisatakse ASP.NET-lahendusele (kasutatakse veebipõhiste rakenduste arendamiseks) testprojekt. See testprojekt tagaks, et kasutajale kuvatakse õige teade.

Sissejuhatus ASP.NET-i testimisse

Vaatame nüüd lähemalt, kuidas ASP.NET-is testimisega töötada.

.NET-i üksuse testimisprojekti loomine

Enne testprojekti loomist peame tegema alltoodud kõrgetasemelised toimingud.

  1. Kasutage meie varasemates jaotistes kasutatud demorakendust. See on meie rakendus, mida tuleb testida.
  2. Lisame demorakendusele uue klassi. See klass sisaldab stringi nimega 'Guru99 – ASP.NET.' Seda stringi testitakse meie testimisprojektis.
  3. Lõpuks loome testimisprojekti. Seda kasutatakse ASP.NET rakenduse testimiseks.

Järgime seega ülaltoodud kõrgetasemelisi samme ja vaatame, kuidas testimist rakendada.

Step 1) Veenduge, et DemoApplication oleks Visual Studios avatud.

Step 2) Lisagem nüüd demorakendusse uus klass. See klass sisaldab stringi nimega 'Guru99 – ASP.NET.' Seda stringi testitakse meie testimisprojektis.

Uue klassi lisamiseks järgige allolevat sammu.

.NET-i üksuse testimisprojekti loomine

  1. Paremklõpsake Visual Studios Solution Exploreris 'DemoApplication'i.
  2. Valige kontekstimenüüst suvand Lisa->Klass.

Step 3) Selles sammus

.NET-i üksuse testimisprojekti loomine

  1. Andke uuele klassile nimi "Tutorial.cs".
  2. Faili demorakendusse lisamiseks klõpsake nuppu "Lisa".

Nüüd lisatakse faili "DemoApplication" uus klass.

Step 4) Ava uus Tutorial.cs fail rakendusest „DemoApplication“. Lisa string „Guru99 – ASP.NET.

Faili avamiseks topeltklõpsake Solution Exploreris failil Tutorial.cs.

.NET-i üksuse testimisprojekti loomine

Failile on vaikekood juba kirjutatud. Ärge muretsege selle koodi pärast, vaid lisage allolev koodirida.

.NET-i üksuse testimisprojekti loomine

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

Code Selgitus:-

  1. Muutuja Name on tüüpi string.
  2. Lõpuks, Tutorial klassi konstruktoris, määrake Name muutujale väärtus. Väärtus omistatakse „Guru99 – ASP.NET”

Step 5) Nüüd minge faili demo.aspx ja lisage koodiread, et kuvada tekst „Guru99 – ASP.NET.

.NET-i üksuse testimisprojekti loomine

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

  1. Esimene rida loob klassi 'Tutorial' objekti. See on esimene samm klasside ja objektidega töötamisel. Objektile antakse nimi 'tp'.
  2. Lõpuks kutsume failist demo.aspx faili tutorial.cs. See kuvab muutuja Name väärtuse.

Kui käivitate ülaltoodud programmi Visual Studios, saate järgmise väljundi.

Väljund:-

.NET-i üksuse testimisprojekti loomine

Väljundist näete teadet „Guru99 – ASP.NET”.

Step 6) Nüüd lisame oma testprojekti demorakendusse. Seda tehakse Visual Studio abil.

.NET-i üksuse testimisprojekti loomine

  1. Paremklõpsake valikut Lahendus – Demorakendus.
  2. Valige kontekstimenüüst suvand "Uus projekt".

Step 7) Etapp hõlmab ühikutesti projekti lisamist demorakendusele.

.NET-i üksuse testimisprojekti loomine

  1. Klõpsake vasakpoolsel paneelil üksuse tüübil "Test".
  2. Valige dialoogiboksi keskosas kuvatavast loendist üksus üksuse katseprojektina.
  3. Andke testprojektile nimi. Meie puhul on antud nimi "DemoTest".
  4. Lõpuks klõpsake nuppu "OK".

Lõpuks näete, et DemoTesti projekt lisatakse lahenduste uurijasse. Selle abil näete ka muid faile, nagu UnitTest1.cs, atribuudid jne on vaikimisi loodud.

.NET-i üksuse testimisprojekti loomine

Testprojekti käivitamine

Eelmises osas loodud testprojekti kasutatakse meie ASP.NET rakenduse testimiseks. Järgmistes sammudes vaatame, kuidas testprojekti käivitada.

  • Esimene samm oleks viite lisamine ASP.NET projektile. See samm viiakse läbi selleks, et testprojektil oleks juurdepääs ASP.NET projektile.
  • Seejärel kirjutame oma testikoodi.
  • Lõpuks käivitame testi Visual Studio abil.

Step 1) Meie demorakenduse testimiseks peab esimene testprojekt viitama demorakendusele. Lisage viide Demo.aspx lahendusele.

.NET testprojekti käitamine

  1. Paremklõpsake projekti Demo Test
  2. Valige menüüst suvand Lisa->Viide.

Step 2) Järgmine samm on lisada demorakendusele viide.

.NET testprojekti käitamine

  1. Valige dialoogiboksi vasakpoolsest servast suvand Projektid
  2. Klõpsake valiku DemoApplication kõrval olevat märkeruutu
  3. Klõpsake nuppu 'OK'.

See võimaldab demotest projektil meie demorakendust testida.

Step 3) Nüüd on aeg lisada testkood meie testprojekti.

  • Selle esimeseks topeltklõpsake lahendus Exploreris failil UnitTest1 (Visual Studio lisab testiprojekti loomisel automaatselt faili UnitTest1).
  • See on fail, mida käivitatakse ASP.NET projekti testimiseks.

.NET testprojekti käitamine

Näete allolevat koodi, mille Visual Studio lisab faili UnitTest1.cs. See on testprojekti käitamiseks vajalik põhikood.

.NET testprojekti käitamine

Step 4) Järgmine samm on koodi lisamine, mida kasutatakse stringi „Guru99 – ASP.NET.

.NET testprojekti käitamine

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. Looge uus objekt nimega 'tp' tüüpi Tutorial
  2. Assert.AreEqual meetodit kasutatakse .NET-is väärtuse ja millegagi võrdse võrdsuse kontrollimiseks. Seega võrdleme meie puhul tp.Name väärtusi Guru99 – ASP.NET.

Step 5) Nüüd käivitame oma testprojekti. Selleks peame minema menüüvalikusse Test->Käivita->Kõik testid.

.NET testprojekti käitamine

Väljund:-

.NET testprojekti käitamine

Visual Studios ilmub test Exploreri aken. See näitab ülaltoodud tulemust ja näitab, et Visual Studios käivitati edukas test.

MSTesti atribuudid ja väited, mida te kasutate

. MicrosoftNimeruum .VisualStudio.TestTools.UnitTesting sisaldab väikest komplekti atribuute ja väiteid, mis hõlmavad enamikku ASP.NET-i ühikteste. Nende esmane õppimine muudab iga järgneva testi lugemise ja haldamise lihtsamaks.

  • [Testiklass] – märgib klassi testide konteinerina. MSTest skannib selle atribuudiga klasse avastamise ajal.
  • [Testimismeetod] – märgib avaliku, parameetriteta meetodi individuaalseks testiks. Meetod tagastab väärtuse void, Task või ValueTask.
  • [Testi lähtestamine] / [Testi puhastamine] – käivitage enne ja pärast iga testimismeetodit. Kasutage neid jagatud seadistuse, näiteks näidisrepositooriumi või mälusisese konteksti loomiseks ja kõrvaldamiseks.
  • [Klassi lähtestamine] / [Klassi puhastamine] – käivitatakse kogu klassi jaoks üks kord. Need on kasulikud, kui seadistamine on kulukas, näiteks testandmebaasi külvamine.
  • [Andmerida] ja [AndmeteTestimismeetod] – varustavad parameetritega sisenditega, nii et üks testimismeetod hõlmab mitut juhtumit.

Iga testimismeetodi sees kontrollib Assert-klass tulemust. Levinud väljakutsete hulka kuuluvad Assert.AreEqual väärtuste võrdlemiseks, Assert.IsTrue ja Assert.IsFalse tõeväärtuste jaoks, Assert.IsNull ja Assert.IsNotNull viidete jaoks ning Assert.ThrowsException eeldatavate erandite jaoks. Struktureeri iga test mustri Arrange, Act, Assert abil, nii et seadistamine, kutsumine ja verifitseerimine jääksid visuaalselt eraldatuks. See paigutus muudab ebaõnnestunud testide silumise lihtsaks, sest ebaõnnestunud rida on peaaegu alati allosas olev Assert.

MSTesti, NUniti ja xUniti võrdlus ASP.NET-i jaoks

.NET ökosüsteemis domineerivad kolm testimisraamistikku. Kõik need töötavad Visual Studio sees ja integreeruvad dotnet test'iga, seega erinevus seisneb peamiselt stiilis, kogukonna toes ja vaikekäitumises.

  • MSTest – saatja Microsoft ja see on eelinstallitud Visual Studio Unit Test Project malliga, mida selles õpetuses varem kasutati. See on kõige turvalisem vaikeväärtus, kui meeskond on ühiktestimises uus. Microsoft virn.
  • NUnit – kolmest vanim, algselt portitud JUnitSee pakub rikkalikku piirangute mudelit, parameetritega teste TestCase'i ja TestCaseSource'i kaudu ning küpset tuge igas .NET-i versioonis.
  • xUnit.net – kasutatakse ASP.NET Core'i ja Entity Framework Core'i meeskondade sisemiselt. See asendab SetUp meetodi konstruktori ja IDisposable'iga, soovitab iga käitumise kohta eraldi testiklassi ning kasutab [Fact] ja [Theory] asemel [TestMethod].

Kõik kolm raamistikku avastavad teste atribuutide kaudu, käivitavad käsu dotnet test ja loovad trx või xUnit XML-aruandeid, mis CI-torujuhtmed, näiteks Azure DevOps, GitHubi toimingud ja Jenkins saab otse tarbida. Esimese ASP.NET projekti puhul hoiab MSTesti juurde jäämine tööriistakett lihtsana. Meeskonnad, kes soovivad rikkalikumat parameetrite määramist või juba kasutavad ASP.NET Core'i, valivad sageli xUniti, et see oleks järjepidev raamistikuga, millega see loodi.

ASP.NET-i rakenduste ühiktestimise parimad tavad

Väikese harjumuste komplekti järgimine hoiab komplekti kiire, usaldusväärse ja kasulikuna kogu ASP.NET projekti eluea jooksul.

  1. Testi ühte käitumist iga meetodi kohta. Test, mis väidab mitut omavahel mitteseotud asja, ebaõnnestub mitmel põhjusel ja selle parandamine võtab kauem aega.
  2. Nimeta testid kavatsuse järgi. Selline muster nagu MethodUnderTest_Scenario_ExpectedResult muudab Test Exploreri väljundiks klassi loetava spetsifikatsiooni.
  3. Eraldage seade välistest süsteemidest. Mähi faili-, võrgu- ja andmebaasikõned liideste taha ning vaheta võltsingute või näidiste vastu, et test ei tabaks tegelikku sõltuvust.
  4. Hoidke testid kiired. Püüa kogu moodulite komplekt sekunditega läbida. Aeglased testid jäävad vahele ja vahelejäänud testid peidavad regressioone.
  5. Järgi paigutust „Arvelda, tegutse, esita“. Kolm lühikest tühjade ridadega plokki annavad märku kavatsusest ja muudavad ebaõnnestunud joonte märkamise lihtsaks.
  6. Käivita iga commitiga testid. Ühenda CI-torustikuga võrku, et katkine test blokeeriks ühendamise saatmise asemel.ping tootmisele.
  7. Track-koodi katvus, aga ära seda taga ajama hakka. Hõlmatud andmed toovad esile testimata teid, kuid suur arv üksi ei taga kvaliteeti. RevVaata, mida need puuduvad read tegelikult teevad.

Koos rakendatuna muudavad need tavad ülalpool loodud DemoTesti projekti komplekti algmaterjaliks, mis püüab kinni regressioone igal pushil, dokumenteerib käitumist tulevastele arendajatele ja annab kindlustunde ASP.NET-i rakenduse refaktoreerimisel.

KKK

Jah. GitHub Copilot saab luua [TestClass] ja [TestMethod] plokke, soovitada Arrange Act Assert paigutusi ja genereerida parameetriga [DataRow] juhtumeid sihtmeetodi signatuurist. RevEnne tootmises usaldamist vaadake genereeritud väited üle.

Jah. Masinõppel põhinevad assistendid oskavad märgistada ebakindlaid teste, pakkuda paremaid nimesid ja esile tõsta dubleeritud seadistusi, mis kuuluvad [TestInitialize]-i. Need lühendavad ülevaatamise aega, kuid arendaja vastutab ikkagi iga väite õigsuse eest.

Ühiktest isoleerib ühe klassi või meetodi ja imiteerib selle sõltuvusi. Integratsioonitest harjutab mitut komponenti koos, sageli läbides päris andmebaasi või veebiserveri. Ühiktestid töötavad millisekundites; integratsioonitestid võtavad kauem aega, kuid leiavad juhtmestiku vead.

Visual Studio Enterprise'is kasutage testianalüüsi Code Kõikide testide katvus. Teistes väljaannetes lisage Coverlet N.uGet pakkige ja käivitage dotnet test –collect:”XPlat Code „Katvus”, et toota Cobertura XML-aruanne.

Mähi sõltuvus liidese taha ja sisesta see konstruktorisse. Testis edasta stub või mock, mis on ehitatud selliste teekidega nagu Moq või NSubstitute, nii et testitav üksus ei puutu kunagi kokku tegeliku andmebaasi ega HTTP lõpp-punktiga.

Käivita testprojekti sisaldavas kaustas käsk „dotnet test“. See käsk loob projekti, tuvastab kõik [TestMethod] meetodid, käivitab need ja prindib kokkuvõtte. CI-süsteemid, näiteks GitHub Actions, kutsuvad sama käsku töövoo etapis.

Märgi meetod atribuudiga [DataTestMethod] ja lisa üks või mitu atribuuti [DataRow], mis annavad sisendväärtused ja oodatava tulemuse. Seejärel käivitab MSTest sama sisu üks kord rea kohta, luues iga juhtumi jaoks Test Exploreris eraldi rea.

Kirjuta ebaõnnestunud [TestMethod], mis kirjeldab järgmist nõutavat käitumist, lisa piisavalt tootmismeetodit, et see õnnestuks, seejärel refaktoreeri. Selle punase rohelise refaktoreerimistsükli kordamine hoiab disaini testide juhituna, mitte vastupidi.

Võta see postitus kokku järgmiselt: