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.
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.
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.
- Skorzystaj z naszej โDemoAplikacjiโ uลผytej we wczeลniejszych sekcjach. To bฤdzie nasza aplikacja, ktรณrฤ trzeba przetestowaฤ.
- 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.
- 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ฤ.
- W programie Visual Studio kliknij prawym przyciskiem myszy pozycjฤ โDemoApplicationโ w Eksploratorze rozwiฤ zaล.
- Z menu kontekstowego wybierz opcjฤ Dodaj->Klasa.
Krok 3) W tym etapie,
- Nadaj nowej klasie nazwฤ โTutorial.csโ.
- 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ล.
Plik bฤdzie miaล juลผ zapisany domyลlny kod. Nie przejmuj siฤ tym kodem, po prostu dodaj poniลผszฤ liniฤ kodu.
namespace DemoApplication { public class Tutorial { public String Name; public Tutorial() { Name = "Guru99 - ASP.Net"; } } }
Code Wyjaลnienie:-
- Zmienna Nazwa jest typu string.
- 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.โ
<!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:-
- Pierwszy wiersz tworzy obiekt klasy โTutorialโ. To pierwszy krok w pracy z klasami i obiektami. Nazwa nadana obiektowi to โtpโ.
- 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:-
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.
- Kliknij prawym przyciskiem myszy Rozwiฤ zanie โ DemoApplication.
- W menu kontekstowym wybierz opcjฤ โNowy projektโ.
Krok 7) Krok polega na dodaniu projektu Unit Test do aplikacji demonstracyjnej.
- Kliknij typ elementu jako โTestโ w panelu po lewej stronie.
- Z listy znajdujฤ cej siฤ w ลrodkowej czฤลci okna dialogowego wybierz pozycjฤ โProjekt testu jednostkowegoโ.
- Nadaj nazwฤ projektowi testowemu. W naszym przypadku podana nazwa to โDemoTestโ.
- 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.
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.
- Kliknij prawym przyciskiem myszy projekt testu demonstracyjnego
- Z menu wybierz opcjฤ Dodaj->Referencja.
Krok 2) Kolejnym krokiem jest dodanie referencji do aplikacji DemoApplication.
- Wybierz opcjฤ Projekty z lewej strony okna dialogowego
- Kliknij pole wyboru obok DemoApplication
- 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.
Zobaczysz poniลผszy kod dodany przez Visual Studio w pliku UnitTest1.cs. To jest podstawowy kod potrzebny do uruchomienia projektu testowego.
Krok 4) Nastฤpnym krokiem jest dodanie kodu, ktรณry sลuลผy do testowania ciฤ gu โGuru99 โ ASP.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"); } } }
- Utwรณrz nowy obiekt o nazwie โtpโ typu Tutorial
- 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.
Wynik:-
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.
- 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.
- Nazwy testรณw zaleลผฤ od intencji. Wzorzec taki jak MethodUnderTest_Scenario_ExpectedResult sprawia, ลผe โโwynik Eksploratora testรณw staje siฤ czytelnฤ specyfikacjฤ klasy.
- 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ลฤ.
- 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.
- 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.
- Przeprowadzaj testy przy kaลผdym zatwierdzeniu. Podลฤ cz test Dotnet do potoku CI, tak aby uszkodzony test blokowaล scalanie zamiast wysyลaniaping do produkcji.
- 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.


















