TESTOWANIE JEDNOSTKOWE w Asp.Net: kompletny samouczek

⚡ Inteligentne podsumowanie

Testowanie jednostkowe aplikacji ASP.NET w programie Visual Studio rozpoczyna się od projektu testu jednostkowego, po którym następuje odwołanie do projektu docelowego, dodanie atrybutów MSTest [TestClass] i [TestMethod] oraz wywołanie metod Assert w celu udowodnienia, że ​​klasy zachowują się zgodnie z założeniami.

  • 🧪 Projekt testowy: Dodaj projekt testu jednostkowego do rozwiązania ASP.NET i odwołaj się do projektu docelowego, który chcesz zweryfikować.
  • 🏷️ Atrybuty: Oznacz klasę za pomocą [TestClass], a każdy test za pomocą [TestMethod], aby MSTest mógł je wykryć.
  • ✅ Asercje: Użyj wywołań Assert.AreEqual, Assert.IsTrue i podobnych, aby zadeklarować oczekiwany wynik każdego testu.
  • ▶ ️ Uruchom testy: Menu Wykonaj test Uruchom wszystkie testy w programie Visual Studio i sprawdź w Eksploratorze testów, czy testy zakończyły się sukcesem, czy niepowodzeniem.
  • ⚖️. Wybór frameworka: MSTest, NUnit i xUnit współpracują z dotnet test; MSTest jest dostarczany domyślnie, w przypadku ASP.NET Core preferowany jest xUnit.
  • 🛠️. Najlepsze praktyki: Wyizoluj jednostkę, postępuj zgodnie z poleceniami Arrange Act Assert i dbaj o to, aby cały pakiet działał szybko, tak aby działał przy każdym zatwierdzeniu.

Testowanie jednostkowe w ASP.NET

Testowanie jest istotnym aspektem każdego języka programowania. Testy w przypadku aplikacji ASP.NET jest możliwe przy pomocy programu Visual Studio.

Visual Studio służy do tworzenia kodu testowego. Służy również do uruchamiania kodu testowego aplikacji ASP.NET. W ten sposób można łatwo sprawdzić ewentualne błędy w aplikacji ASP.NET. W Visual Studio moduł testowania jest dostępny od razu po instalacji. Można natychmiast przeprowadzić test dla projektu ASP.NET.

Wprowadzenie do testowania dla ASP.NET

Pierwszym poziomem testowania projektu ASP.NET jest testowanie na poziomie jednostkowym. Test ten sprawdza funkcjonalność aplikacji. Testowanie przeprowadza się w celu upewnienia się, że aplikacja działa zgodnie z oczekiwaniami. W ASP.NET pierwszym zadaniem jest utworzenie projektu testowego w programie Visual Studio. Projekt testowy będzie zawierał kod niezbędny do przetestowania aplikacji.

Rozważmy poniższą stronę internetową. Na stronie znajduje się komunikat „Guru99 – Wyświetlany jest komunikat „ASP.NET”. Jak możemy potwierdzić, że po uruchomieniu projektu ASP.NET wyświetlany jest prawidłowy komunikat? Można to zrobić, dodając projekt testowy do rozwiązania ASP.NET (używanego do tworzenia aplikacji internetowych). Ten projekt testowy zapewni wyświetlanie użytkownikowi prawidłowego komunikatu.

Wprowadzenie do testowania dla ASP.NET

Przyjrzyjmy się teraz bliżej, aby zobaczyć, jak można pracować nad testowaniem w ASP.NET.

Tworzenie projektu testów jednostkowych .NET

Zanim utworzymy projekt testowy, musimy wykonać poniższe kroki ogólne.

  1. Skorzystaj z naszej „DemoAplikacji” użytej we wcześniejszych sekcjach. To będzie nasza aplikacja, którą trzeba przetestować.
  2. Dodamy nową klasę do DemoApplication. Ta klasa będzie zawierać ciąg znaków o nazwie „Guru99 – ASP.NET. Ten ciąg znaków zostanie przetestowany w naszym projekcie testowym.
  3. Na koniec utworzymy projekt testowy, który posłuży do przetestowania aplikacji ASP.NET.

Przeanalizujmy zatem powyższe kroki ogólne i zobaczmy, jak wdrożyć testowanie.

Krok 1) Upewnij się, że aplikacja DemoApplication jest otwarta w programie Visual Studio.

Krok 2) Dodajmy teraz nową klasę do DemoApplication. Klasa ta będzie zawierać ciąg znaków o nazwie „Guru99 – ASP.NET. Ten ciąg znaków zostanie przetestowany w naszym projekcie testowym.

Wykonaj poniższy krok, aby dodać nową klasę.

Tworzenie projektu testów jednostkowych .NET

  1. W programie Visual Studio kliknij prawym przyciskiem myszy pozycję „DemoApplication” w Eksploratorze rozwiązań.
  2. Z menu kontekstowego wybierz opcję Dodaj->Klasa.

Krok 3) W tym etapie,

Tworzenie projektu testów jednostkowych .NET

  1. Nadaj nowej klasie nazwę „Tutorial.cs”.
  2. Kliknij przycisk „Dodaj”, aby dodać plik do aplikacji DemoApplication.

Teraz do pliku „DemoApplication” dodana została nowa klasa.

Krok 4) Otwórz nowy plik Tutorial.cs z „DemoApplication”. Dodaj ciąg „Guru99 – ASP.NET.”

Aby otworzyć plik, kliknij dwukrotnie plik Tutorial.cs w Eksploratorze rozwiązań.

Tworzenie projektu testów jednostkowych .NET

Plik będzie miał już zapisany domyślny kod. Nie przejmuj się tym kodem, po prostu dodaj poniższą linię kodu.

Tworzenie projektu testów jednostkowych .NET

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

Code Wyjaśnienie:-

  1. Zmienna Nazwa jest typu string.
  2. Na koniec konstruktor klasy Tutorial przypisuje wartość zmiennej Name. Wartość ta jest przypisywana do „Guru99 – ASP.NET”

Krok 5) Teraz przejdź do pliku demo.aspx i dodaj wiersze kodu, aby wyświetlić tekst „Guru99 – ASP.NET.”

Tworzenie projektu testów jednostkowych .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 Wyjaśnienie:-

  1. Pierwszy wiersz tworzy obiekt klasy „Tutorial”. To pierwszy krok w pracy z klasami i obiektami. Nazwa nadana obiektowi to „tp”.
  2. Na koniec wywołujemy „tutorial.cs” z pliku demo.aspx. Wyświetla wartość zmiennej Nazwa.

Po uruchomieniu powyższego programu w programie Visual Studio otrzymasz następujący wynik.

Wynik:-

Tworzenie projektu testów jednostkowych .NET

Na wyjściu zobaczysz komunikat „Guru99 – Wyświetlono „ASP.NET”.

Krok 6) Teraz dodajmy nasz projekt testowy do aplikacji demonstracyjnej. Zrobimy to za pomocą Visual Studio.

Tworzenie projektu testów jednostkowych .NET

  1. Kliknij prawym przyciskiem myszy Rozwiązanie – DemoApplication.
  2. W menu kontekstowym wybierz opcję „Nowy projekt”.

Krok 7) Krok polega na dodaniu projektu Unit Test do aplikacji demonstracyjnej.

Tworzenie projektu testów jednostkowych .NET

  1. Kliknij typ elementu jako „Test” w panelu po lewej stronie.
  2. Z listy znajdującej się w środkowej części okna dialogowego wybierz pozycję „Projekt testu jednostkowego”.
  3. Nadaj nazwę projektowi testowemu. W naszym przypadku podana nazwa to „DemoTest”.
  4. Na koniec kliknij przycisk „OK”.

Ostatecznie projekt DemoTest zostanie dodany do eksploratora rozwiązań. Dzięki temu możesz także zobaczyć, że inne pliki, takie jak UnitTest1.cs, właściwości itp. są generowane domyślnie.

Tworzenie projektu testów jednostkowych .NET

Uruchomienie projektu testowego

Projekt testowy utworzony w poprzedniej sekcji służy do testowania naszej aplikacji ASP.NET. W poniższych krokach pokażemy, jak uruchomić projekt testowy.

  • Pierwszym krokiem będzie dodanie odwołania do projektu ASP.NET. Ten krok jest wykonywany, aby projekt testowy miał dostęp do projektu ASP.NET.
  • Następnie napiszemy nasz kod testowy.
  • Na koniec uruchomimy test przy użyciu programu Visual Studio.

Krok 1) Aby przetestować naszą aplikację demonstracyjną, pierwszy projekt testowy musi odwoływać się do aplikacji demonstracyjnej. Dodaj odwołanie do rozwiązania Demo.aspx.

Uruchamianie projektu testowego .NET

  1. Kliknij prawym przyciskiem myszy projekt testu demonstracyjnego
  2. Z menu wybierz opcję Dodaj->Referencja.

Krok 2) Kolejnym krokiem jest dodanie referencji do aplikacji DemoApplication.

Uruchamianie projektu testowego .NET

  1. Wybierz opcję Projekty z lewej strony okna dialogowego
  2. Kliknij pole wyboru obok DemoApplication
  3. Kliknij przycisk „OK”.

Umożliwi to projektowi demotestowemu przetestowanie naszej aplikacji DemoApplication.

Krok 3) Teraz czas dodać kod testowy do naszego projektu testowego.

  • Najpierw kliknij dwukrotnie plik UnitTest1 (plik UnitTest1 jest automatycznie dodawany przez program Visual Studio podczas tworzenia projektu Test) w Eksploratorze rozwiązań.
  • To jest plik, który zostanie uruchomiony w celu przetestowania projektu ASP.NET.

Uruchamianie projektu testowego .NET

Zobaczysz poniższy kod dodany przez Visual Studio w pliku UnitTest1.cs. To jest podstawowy kod potrzebny do uruchomienia projektu testowego.

Uruchamianie projektu testowego .NET

Krok 4) Następnym krokiem jest dodanie kodu, który służy do testowania ciągu „Guru99 – ASP.NET.”

Uruchamianie projektu testowego .NET

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. Utwórz nowy obiekt o nazwie „tp” typu Tutorial
  2. Metoda Assert.AreEqual jest używana w .NET do sprawdzania, czy wartość jest równa czemuś innemu. W naszym przypadku porównujemy wartości tp.Name z Guru99 – ASP.NET.

Krok 5) Teraz uruchommy nasz projekt testowy. W tym celu musimy przejść do opcji menu Test->Uruchom->Wszystkie testy.

Uruchamianie projektu testowego .NET

Wynik:-

Uruchamianie projektu testowego .NET

W programie Visual Studio pojawi się okno Eksploratora testów. Wyświetli ono powyższy wynik i poinformuje, że w programie Visual Studio przeprowadzono pomyślny test.

Atrybuty i potwierdzenia MSTest, których będziesz używać

MicrosoftPrzestrzeń nazw .VisualStudio.TestTools.UnitTesting zawiera niewielki zestaw atrybutów i asercji, które obejmują większość testów jednostkowych ASP.NET. Poznanie ich w pierwszej kolejności ułatwia czytanie i konserwację kolejnych testów.

  • [Klasa testowa] – oznacza klasę jako kontener testów. MSTest skanuje klasy z tym atrybutem w momencie wykrywania.
  • [Metoda testowa] – oznacza publiczną, bezparametrową metodę jako indywidualny test. Metoda zwraca void, Task lub ValueTask.
  • [TestInitialize] / [TestCleanup] – uruchamiane przed i po każdej metodzie testowej. Używaj ich do tworzenia i usuwania współdzielonych konfiguracji, takich jak repozytorium pozorowane lub kontekst w pamięci.
  • [Inicjalizacja klasy] / [Czyszczenie klasy] – uruchom raz dla całej klasy. Są przydatne, gdy konfiguracja jest kosztowna, na przykład do tworzenia testowej bazy danych.
  • [Wiersz danych] i [Metoda testu danych] – dostarczają sparametryzowane dane wejściowe, tak aby pojedyncza metoda testowania obejmowała kilka przypadków.

W każdej metodzie testowej klasa Assert sprawdza wynik. Typowe wywołania to Assert.AreEqual dla porównań wartości, Assert.IsTrue i Assert.IsFalse dla wartości logicznych, Assert.IsNull i Assert.IsNotNull dla referencji oraz Assert.ThrowsException dla oczekiwanych wyjątków. Ustrukturyzuj każdy test, korzystając ze wzorca Arrange, Act, Assert, aby konfiguracja, wywołanie i weryfikacja pozostały wizualnie oddzielone. Taki układ ułatwia debugowanie nieudanych testów, ponieważ nieudany wiersz to prawie zawsze pojedynczy Assert na dole.

Porównanie MSTest, NUnit i xUnit dla ASP.NET

W ekosystemie .NET dominują trzy frameworki testowe. Każdy z nich działa w środowisku Visual Studio i integruje się z dotnet test, więc różnice dotyczą głównie stylu, wsparcia społeczności i domyślnego zachowania.

  • MSTest – wysłane przez Microsoft i jest preinstalowany z szablonem projektu testów jednostkowych programu Visual Studio, który był używany wcześniej w tym samouczku. Jest to najbezpieczniejsze ustawienie domyślne, gdy zespół dopiero zaczyna przygodę z testowaniem jednostkowym. Microsoft stos.
  • NJednostka – najstarszy z trzech, pierwotnie przeniesiony z JUnitOferuje bogaty model ograniczeń, parametryzację testów za pomocą TestCase i TestCaseSource oraz dojrzałe wsparcie dla każdej wersji .NET.
  • xUnit.net – używany wewnętrznie przez zespoły ASP.NET Core i Entity Framework Core. Zastępuje metodę SetUp konstruktorem i interfejsem IDisposable, zaleca jedną klasę testową na zachowanie i używa [Fact] i [Theory] zamiast [TestMethod].

Wszystkie trzy struktury wykrywają testy za pomocą atrybutów, uruchamiają polecenie dotnet test i generują raporty trx lub xUnit XML, które potoki CI, takie jak Azure DevOps, działania GitHub i Jenkins Można go bezpośrednio wykorzystać. W przypadku pierwszego projektu ASP.NET, korzystanie z MSTest pozwala zachować prostotę zestawu narzędzi. Zespoły, które chcą bogatszej parametryzacji lub już korzystają z ASP.NET Core, często wybierają xUnit ze względu na spójność z frameworkiem, w którym został zbudowany.

Najlepsze praktyki testowania jednostkowego aplikacji ASP.NET

Przestrzeganie kilku zasad sprawia, że ​​pakiet jest szybki, niezawodny i użyteczny przez cały okres trwania projektu ASP.NET.

  1. Przetestuj jedno zachowanie dla każdej metody. Test, który sprawdza kilka niezależnych rzeczy, kończy się niepowodzeniem z wielu powodów, a jego naprawienie zajmuje więcej czasu.
  2. Nazwy testów zależą od intencji. Wzorzec taki jak MethodUnderTest_Scenario_ExpectedResult sprawia, że ​​wynik Eksploratora testów staje się czytelną specyfikacją klasy.
  3. Odizoluj jednostkę od systemów zewnętrznych. Zawijaj wywołania plików, sieci i baz danych za pomocą interfejsów i podmieniaj je na fałszywe lub mocki, aby test nie natrafił na rzeczywistą zależność.
  4. Utrzymuj szybkość testów. Dąż do ukończenia całego pakietu modułów w kilka sekund. Powolne testy są pomijane, a pominięte testy ukrywają regresje.
  5. Postępuj zgodnie z zasadą: Uporządkuj, Działaj, Potwierdź. Trzy krótkie bloki rozdzielone pustymi liniami sygnalizują zamiar przejazdu i ułatwiają zauważenie wadliwych linii.
  6. Przeprowadzaj testy przy każdym zatwierdzeniu. Podłącz test Dotnet do potoku CI, tak aby uszkodzony test blokował scalanie zamiast wysyłaniaping do produkcji.
  7. Track pokrycia kodu, ale nie należy go ścigać. W raporcie wskazano nieprzetestowane ścieżki, ale sama wysoka liczba nie gwarantuje jakości. Revzobacz, co właściwie robią brakujące linijki.

Zastosowane razem, te praktyki przekształcają opisany powyżej projekt DemoTest w zalążek pakietu, który wychwytuje regresje przy każdym wprowadzeniu zmian, dokumentuje zachowanie dla przyszłych programistów i daje pewność podczas refaktoryzacji aplikacji ASP.NET.

FAQ

Tak. GitHub Copilot może obsługiwać bloki [TestClass] i [TestMethod], sugerować układy Arrange Act Assert i generować sparametryzowane przypadki [DataRow] z sygnatury metody docelowej. Revprzejrzyj wygenerowane stwierdzenia przed zatwierdzeniem ich w środowisku produkcyjnym.

Tak. Asystenci oparty na uczeniu maszynowym mogą oznaczać słabe testy, proponować lepsze nazwy i podświetlać zduplikowane konfiguracje, które powinny znaleźć się w [TestInitialize]. Skracają czas przeglądu, ale programista nadal jest odpowiedzialny za poprawność każdego potwierdzenia.

Test jednostkowy izoluje jedną klasę lub metodę i symuluje jej zależności. Test integracyjny testuje kilka komponentów jednocześnie, często wykorzystując rzeczywistą bazę danych lub serwer WWW. Testy jednostkowe działają w milisekundach; testy integracyjne trwają dłużej, ale wychwytują błędy w okablowaniu.

W programie Visual Studio Enterprise użyj funkcji Test Analyze Code Obejmuje wszystkie testy. W innych edycjach należy dodać Coverlet N.uGet spakuj i uruchom dotnet test –collect:”XPlat Code „Pokrycie” w celu wytworzenia Cobertura Raport XML.

Zawiń zależność w interfejs i wstrzyknij ją przez konstruktor. W teście przekaż stub lub mock zbudowany z bibliotek takich jak Moq lub NSubstitute, aby testowana jednostka nigdy nie miała kontaktu z prawdziwą bazą danych ani punktem końcowym HTTP.

Uruchom dotnet test w folderze zawierającym projekt testowy. Polecenie kompiluje projekt, wykrywa każdą metodę [TestMethod], uruchamia ją i wyświetla podsumowanie. Systemy CI, takie jak GitHub Actions, wywołują to samo polecenie w kroku przepływu pracy.

Oznacz metodę atrybutem [DataTestMethod] i dodaj jeden lub więcej atrybutów [DataRow], które dostarczają wartości wejściowe i oczekiwany wynik. Następnie MSTest uruchamia ten sam kod raz dla każdego wiersza, generując osobny wiersz w Eksploratorze Testów dla każdego przypadku.

Napisz błędną metodę [TestMethod], która opisuje kolejne wymagane zachowanie, dodaj tylko tyle kodu produkcyjnego, aby ją zaliczyć, a następnie zrefaktoryzuj. Powtarzanie tej czerwono-zielonej pętli refaktoryzacji sprawia, że ​​projekt jest oparty na testach, a nie odwrotnie.

Podsumuj ten post następująco: