TESTOVÁNÍ JEDNOTEK v Asp.Net: Kompletní návod

⚡ Chytré shrnutí

Jednotkové testování ASP.NET aplikace ve Visual Studiu začíná projektem jednotkového testu, propojuje odkaz s cílovým projektem, přidává atributy MSTest [TestClass] a [TestMethod] a volá metody Assert, aby se ověřilo, že se třídy chovají tak, jak byly navrženy.

  • 🧪 Testovací projekt: Přidejte projekt jednotkového testování do řešení ASP.NET a odkazujte na cílový projekt, který chcete ověřit.
  • ???? ️ Atributy: Označte třídu pomocí [TestClass] a každý test pomocí [TestMethod], aby je MSTest mohl objevit.
  • (Tj. Tvrzení: Pro deklaraci očekávaného výsledku každého testu použijte volání Assert.AreEqual, Assert.IsTrue a podobná volání.
  • ▶ </ s> Spusťte testy: Nabídka Spustit test Spusťte všechny testy v aplikaci Visual Studio a zkontrolujte Průzkumník testů, zda neobsahuje výsledky úspěšné a neúspěšné.
  • 🇧🇷 Výběr rámce: MSTest, NUnit a xUnit fungují s dotnet test; MSTest se dodává standardně, xUnit je preferován pro ASP.NET Core.
  • 🛠️ Nejlepší praxe: Izolujte jednotku, řiďte se postupem Arrange Act Assert a udržujte celou sadu rychlou, aby běžela při každém commitu.

Jednotkové testování v ASP.NET

Testování je základním aspektem každého programovacího jazyka. Testování pro ASP.NET aplikace je to možné s pomocí Visual Studia.

Visual Studio se používá k vytváření testovacího kódu. Používá se také ke spuštění testovacího kódu pro ASP.NET aplikaci. Tímto způsobem je snadné kontrolovat chyby v ASP.NET aplikaci. Ve Visual Studiu je testovací modul dodáván s předpřipravenými funkcemi. Lze okamžitě provést test pro ASP.NET projekt.

Úvod do testování pro ASP.NET

První úrovní testování projektu ASP.NET je testování na úrovni jednotek. Tímto testem se testuje funkčnost aplikace. Testování se provádí za účelem zajištění toho, aby se aplikace chovala očekávaným způsobem. V ASP.NET je prvním úkolem vytvoření testovacího projektu ve Visual Studiu. Testovací projekt bude obsahovat potřebný kód pro testování aplikace.

Podívejme se na níže uvedenou webovou stránku. Na stránce máme zprávu „Guru99 – Zobrazí se „ASP.NET“. Jak nyní můžeme ověřit, zda se při spuštění projektu ASP.NET zobrazí správná zpráva? To se provádí přidáním testovacího projektu do řešení ASP.NET (používaného k vývoji webových aplikací). Tento testovací projekt by zajistil, že se uživateli zobrazí správná zpráva.

Úvod do testování pro ASP.NET

Pojďme se nyní podívat podrobněji a zjistit, jak můžeme pracovat na testování v ASP.NET.

Vytvoření projektu testování jednotek .NET

Než vytvoříme testovací projekt, musíme provést níže uvedené kroky na vysoké úrovni.

  1. Použijte naši 'Demoaplikaci' použitou v předchozích částech. Toto bude naše aplikace, kterou je třeba otestovat.
  2. Do DemoApplication přidáme novou třídu. Tato třída bude obsahovat řetězec s názvem 'Guru99 – ASP.NET. Tento řetězec bude testován v našem testovacím projektu.
  3. Nakonec vytvoříme testovací projekt. Ten bude použit k otestování ASP.NET aplikace.

Pojďme se tedy řídit výše uvedenými kroky na vysoké úrovni a podívat se, jak implementovat testování.

Krok 1) Ujistěte se, že je DemoApplication otevřená ve Visual Studiu.

Krok 2) Nyní přidejme do DemoApplication novou třídu. Tato třída bude obsahovat řetězec s názvem 'Guru99 – ASP.NET. Tento řetězec bude testován v našem testovacím projektu.

Chcete-li přidat novou třídu, postupujte podle níže uvedených kroků.

Vytvoření projektu testování jednotek .NET

  1. V aplikaci Visual Studio klikněte pravým tlačítkem na 'DemoApplication' v Průzkumníku řešení.
  2. Vyberte možnost Přidat->Třída z kontextové nabídky.

Krok 3) V tomto kroku,

Vytvoření projektu testování jednotek .NET

  1. Pojmenujte novou třídu „Tutorial.cs“.
  2. Kliknutím na tlačítko 'Přidat' přidáte soubor do DemoApplication.

Nyní je do souboru „DemoApplication“ přidána nová třída.

Krok 4) Otevřete nový soubor Tutorial.cs z „DemoApplication“. Přidejte řetězec „Guru99 – ASP.NET.

Chcete-li soubor otevřít, poklepejte na soubor Tutorial.cs v Průzkumníku řešení.

Vytvoření projektu testování jednotek .NET

Soubor bude mít již napsaný nějaký výchozí kód. S tímto kódem se neobtěžujte, stačí přidat níže uvedený řádek kódu.

Vytvoření projektu testování jednotek .NET

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

Code Vysvětlení:-

  1. Proměnná Name je typu string.
  2. Nakonec v konstruktoru třídy Tutorial přiřaďte hodnotu proměnné Name. Hodnota je přiřazena k „Guru99 – ASP.NET”

Krok 5) Nyní přejděte do souboru demo.aspx a přidejte řádky kódu pro zobrazení textu „Guru99 – ASP.NET.

Vytvoření projektu testování jednotek .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 Vysvětlení:-

  1. První řádek vytvoří objekt třídy 'Tutorial'. Toto je první krok při práci s třídami a objekty. Objekt bude pojmenován 'tp'.
  2. Nakonec zavoláme 'tutorial.cs' ze souboru demo.aspx. Zobrazuje hodnotu proměnné Name.

Když výše uvedený program spustíte v sadě Visual Studio, získáte následující výstup.

Výstup:-

Vytvoření projektu testování jednotek .NET

Z výstupu se zobrazí zpráva „Guru99 – Zobrazí se „ASP.NET“.

Krok 6) Nyní přidejme náš testovací projekt do demo aplikace. To se provádí pomocí Visual Studia.

Vytvoření projektu testování jednotek .NET

  1. Klepněte pravým tlačítkem myši na Řešení – DemoApplication.
  2. V kontextovém menu zvolte možnost 'Nový projekt'.

Krok 7) Tento krok zahrnuje přidání projektu Unit Test do demo aplikace.

Vytvoření projektu testování jednotek .NET

  1. Klikněte na typ položky jako „Test“ na levém panelu.
  2. Vyberte položku jako 'Unit Test Project' ze seznamu, který se objeví ve střední části dialogového okna.
  3. Zadejte název testovacího projektu. V našem případě je daný název 'DemoTest'.
  4. Nakonec klikněte na tlačítko 'OK'.

Nakonec uvidíte projekt DemoTest přidaný do průzkumníka řešení. Díky tomu můžete také vidět další soubory jako UnitTest1.cs, vlastnosti atd. jsou generovány ve výchozím nastavení.

Vytvoření projektu testování jednotek .NET

Spuštění testovacího projektu

Testovací projekt vytvořený v předchozí části se používá k testování naší ASP.NET aplikace. V následujících krocích se podíváme, jak spustit testovací projekt.

  • Prvním krokem by bylo přidání odkazu na projekt ASP.NET. Tento krok se provádí proto, aby testovací projekt měl přístup k projektu ASP.NET.
  • Poté napíšeme náš testovací kód.
  • Nakonec spustíme test pomocí Visual Studia.

Krok 1) Chcete-li otestovat naši ukázkovou aplikaci, musí první testovací projekt odkazovat na ukázkovou aplikaci. Přidejte odkaz na řešení Demo.aspx.

Spuštění .NET Test Project

  1. Klepněte pravým tlačítkem myši na projekt Demo Test
  2. Z nabídky vyberte možnost Přidat->Reference.

Krok 2) Dalším krokem je přidání odkazu na DemoApplication.

Spuštění .NET Test Project

  1. Vyberte možnost Projekty na levé straně dialogového okna
  2. Klikněte na zaškrtávací políčko vedle DemoApplication
  3. Klikněte na tlačítko 'OK'.

To umožní demotestovému projektu otestovat naši DemoApplication.

Krok 3) Nyní je čas přidat testovací kód do našeho testovacího projektu.

  • Nejprve dvakrát klikněte na soubor UnitTest1 (soubor UnitTest1 je automaticky přidán aplikací Visual Studio při vytvoření projektu Test) v Průzkumníku řešení.
  • Toto je soubor, který bude spuštěn pro otestování projektu ASP.NET.

Spuštění .NET Test Project

Níže uvedený kód přidaný aplikací Visual Studio uvidíte v souboru UnitTest1.cs. Toto je základní kód potřebný pro spuštění testovacího projektu.

Spuštění .NET Test Project

Krok 4) Dalším krokem je přidání kódu, který se používá k testování řetězce „Guru99 – ASP.NET.

Spuštění .NET Test Project

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. Vytvořte nový objekt s názvem 'tp' typu Tutorial
  2. Metoda Assert.AreEqual se v .NET používá k testování, zda je hodnota rovna něčemu. V našem případě tedy porovnáváme hodnoty tp.Name s Guru99 – ASP.NET.

Krok 5) Nyní spusťme náš testovací projekt. K tomu musíme přejít do nabídky Test->Spustit->Všechny testy

Spuštění .NET Test Project

Výstup:-

Spuštění .NET Test Project

Ve Visual Studiu se zobrazí okno testovacího Průzkumníka. Tím se zobrazí výše uvedený výsledek a zobrazí se, že v aplikaci Visual Studio byl spuštěn úspěšný test.

Atributy a assertace MSTest, které budete používat

Jedno MicrosoftJmenný prostor .VisualStudio.TestTools.UnitTesting nabízí malou sadu atributů a asercí, které pokrývají většinu jednotkových testů ASP.NET. Pokud se nejprve naučíte tyto atributy, každý další test se snáze čte a spravuje.

  • [Testovací třída] – označí třídu jako kontejner testů. MSTest prohledává třídy s tímto atributem v době objevování.
  • [Testovací metoda] – označuje veřejnou metodu bez parametrů jako individuální test. Metoda vrací void, Task nebo ValueTask.
  • [Inicializace testu] / [Vyčištění testu] – spouštějí se před a po každé testovací metodě. Používejte je k vytvoření a odstranění sdíleného nastavení, jako je například simulované repozitář nebo kontext v paměti.
  • [Inicializace třídy] / [Vyčištění třídy] – spouštějí se jednou pro celou třídu. Jsou užitečné, když je nastavení nákladné, například při nastavování testovací databáze.
  • [Řadek dat] a [Metoda testu dat] – dodávat parametrizované vstupy, aby jedna zkušební metoda pokrývala několik případů.

Uvnitř každé testovací metody třída Assert kontroluje výsledek. Mezi běžná volání patří Assert.AreEqual pro porovnávání hodnot, Assert.IsTrue a Assert.IsFalse pro booleovské hodnoty, Assert.IsNull a Assert.IsNotNull pro reference a Assert.ThrowsException pro očekávané výjimky. Každý test strukturujte pomocí vzoru Arrange, Act, Assert tak, aby nastavení, vyvolání a ověřování zůstaly vizuálně oddělené. Toto rozvržení usnadňuje ladění neúspěšných testů, protože řádek s neúspěšným testem je téměř vždy jediný Assert dole.

Porovnání MSTest, NUnit a xUnit pro ASP.NET

Ekosystému .NET dominují tři testovací frameworky. Každý z nich běží v rámci Visual Studia a integruje se s dotnet test, takže rozdíl spočívá především ve stylu, podpoře komunity a výchozím chování.

  • MSTest – odesláno společností Microsoft a je dodáván s předinstalovanou šablonou projektu pro testování jednotek sady Visual Studio, která byla použita dříve v tomto tutoriálu. Je to nejbezpečnější výchozí nastavení, když je tým v testování jednotek nový. Microsoft zásobník.
  • NUjednotka – nejstarší ze tří, původně přenesený z JUnitNabízí bohatý model omezení, parametrizované testy prostřednictvím TestCase a TestCaseSource a rozvinutou podporu napříč všemi verzemi .NET.
  • xUnit.net – používá se interně týmy ASP.NET Core a Entity Framework Core. Nahrazuje metodu SetUp konstruktorem a IDisposable, podporuje jednu testovací třídu na chování a používá [Fact] a [Theory] místo [TestMethod].

Všechny tři frameworky vyhledávají testy prostřednictvím atributů, spouštějí je pomocí příkazu dotnet test a vytvářejí XML sestavy trx nebo xUnit, které CI kanály, jako například Azure DevOps, akce GitHubu a Jenkins lze přímo spotřebovávat. Pro první ASP.NET projekt udržuje MSTest jednoduchý nástrojový řetězec. Týmy, které chtějí bohatší parametrizaci nebo již používají ASP.NET Core, si často vybírají xUnit kvůli konzistenci s frameworkem, ve kterém byl vytvořen.

Nejlepší postupy pro jednotkové testování aplikací ASP.NET

Dodržování malého souboru návyků udržuje sadu rychlou, spolehlivou a užitečnou po celou dobu trvání projektu ASP.NET.

  1. Otestujte jedno chování na metodu. Test, který tvrdí několik nesouvisejících věcí, selže z mnoha důvodů a jeho oprava trvá déle.
  2. Pojmenujte testy podle záměru. Vzor, jako například MethodUnderTest_Scenario_ExpectedResult, vytváří z výstupu Průzkumníka testů čitelnou specifikaci třídy.
  3. Izolujte jednotku od externích systémů. Zabalte volání souborů, sítě a databáze za rozhraní a nahraďte je falešnými nebo mockovými kódy, aby test nenarazil na skutečnou závislost.
  4. Udržujte testy rychlé. Snažte se, aby celá sada jednotek byla dokončena během několika sekund. Pomalé testy se přeskakují a přeskakované testy skrývají regrese.
  5. Řiďte se rozložením Uspořádat, Provést akci, Prosadit. Tři krátké bloky s prázdnými řádky mezi nimi signalizují záměr a usnadňují odhalení chybných řádků.
  6. Spusťte testy na každém commitu. Propojení testu DotNet s kanálem CI, aby poškozený test blokoval sloučení místo odeslání.ping do výroby.
  7. Tracpokrytí kódu k, ale nehoňte se za ním. Pokrytí zdůrazňuje neprověřené cesty, ale vysoký počet sám o sobě nezaručuje kvalitu. Revpodívejte se, co chybějící řádky skutečně dělají.

Společně tyto postupy proměňují výše uvedený projekt DemoTest v základ sady, která zachycuje regrese při každém odeslání, dokumentuje chování pro budoucí vývojáře a dodává jistotu při refaktorování ASP.NET aplikace.

Nejčastější dotazy

Ano. GitHub Copilot umí vytvářet scaffoldy bloků [TestClass] a [TestMethod], navrhovat rozvržení Arrange Act Assert a generovat parametrizované případy [DataRow] z signatury cílové metody. RevPřed spuštěním v produkčním prostředí si prohlédněte vygenerovaná tvrzení.

Ano. Asistenti založené na strojovém učení mohou označovat křehké testy, navrhovat lepší názvy a zvýrazňovat duplicitní nastavení, která patří do [TestInitialize]. Zkracují dobu kontroly, ale vývojář stále zodpovídá za správnost každého tvrzení (Assert).

Jednotkový test izoluje jednu třídu nebo metodu a simuluje její závislosti. Integrační test prověřuje několik komponent společně, často s využitím reálné databáze nebo webového serveru. Jednotkové testy běží v milisekundách; integrační testy trvají déle, ale odhalují chyby v zapojení.

V aplikaci Visual Studio Enterprise použijte Test Analyze Code Krytí pro všechny testy. U ostatních edic přidejte kryt N.uGet zabalit a spustit dotnet test –collect:”XPlat Code „Pokrytí“ k vytvoření Cobertura XML zpráva.

Závislost zabalte za rozhraní a vložte ji pomocí konstruktoru. V testu předejte stub nebo mock sestavený s knihovnami jako Moq nebo NSubstitute, aby testovaná jednotka nikdy nesouvisela se skutečnou databází nebo koncovým bodem HTTP.

Spusťte příkaz dotnet test ve složce, která obsahuje testovací projekt. Příkaz sestaví projekt, vyhledá všechny metody [TestMethod], spustí je a vypíše souhrn. Systémy CI, jako jsou akce GitHubu, volají stejný příkaz v rámci kroku pracovního postupu.

Označte metodu pomocí [DataTestMethod] a přidejte jeden nebo více atributů [DataRow], které poskytují vstupní hodnoty a očekávaný výsledek. MSTest poté spustí stejné tělo metody jednou pro každý řádek a pro každý případ vytvoří samostatný řádek v Průzkumníku testů.

Napište neúspěšnou metodu [TestMethod], která popisuje další požadované chování, přidejte dostatek produkčního kódu, aby prošla, a poté proveďte refaktoring. Opakování této červeno-zelené refaktoringové smyčky udržuje návrh řízený testy, nikoli naopak.

Shrňte tento příspěvek takto: