Testowanie – ASP .NET MVC część 4
W cyklu poświęconycm ASP .NET MVC do tej pory:
- w części 2 stworzyłem aplikację pozwalającą na przeglądanie danych,
- w części 3 dodałem możliwość edycji i dodawania danych.
Najwyższy czas żeby zaimplementować zautomatyzowane testowanie.
Na początek trochę sprzątania
Przed zaimplementowaniem właściwego testowania trzeba trrochę przystosować kod do tego procesu.
Wpierw wyekstrahuję interfejs z klasy WydarzeniaMVCDataContext, można to zrobić zupełnie automatycznie używając visual studio.

Następnie zmienię kontrolery, tak żeby można je zainicjalizować z dowolną klasą implementującą IWydarzeniaMVCDataContext:
Testowanie
Do testowania stworzę nowy projekt – typu class library. Dodam referencję do NUnit, a do mockowania użyję RhinoMocks. Kiedyś byłem silnym zwolennikiem NMock, ale okazał się trudny w użyciu. Ważne aby dodać także referencję do aplikacji webowej, która będzie testowana. Dla każdego kontrolera stworzę też osobną klasę/suite zawierającą właściwe testy:

Aby łatwiej było mi sprawdzać wyniki działania kontrolera stworzyłem ( już w testach), klasę dziedziczącą po testowanym kontrolerze:

Do testowania trzeba stworzyć mocki, która udają środowisko serwera WWW i danych:
dzięki temu podczas testowania nie będzie potrzeba serwera WWW, ani dostępu do bazy danych. Żeby testować projekt całościowo trzebaby jeszcze zaimplementować osobne testy dla WydarzeniaMVCDataContext, ja pominę ten kawałek i skupię się na testowaniu kontrolera.
Właściwa metoda testująca akcję Lista w kotrolerze kategorii wygląda tak:
szczególnie interesujące jest ustawienie mocka na PobierzKategorię, który zwraca listę 2 kategorii.Na końcu testu pozostaje tylko sprawdzenie, czy uruchomiony został odpowiedni widok oraz czy do widoku zostaną przekazane odpowiednie dane.
Tak przygotowany test możemy już uruchomić – ja np używam w tym celu TestDriven .NET .
Analogicznie można stworzyć testy dla akcji pokazujących dane kontrolera wydarzeń. Ja się skupię na dodawaniu nowych wydarzeń:

Tutaj musiałem się trochę napocić – metoda DodajWydarzenie okazała się słabotestowalna – jak dla mnie to jest pierwsza kandydatka do poprawek. Najlepiej by się ją testowało, gdyby Nazwa, opis, itd były do niej parametrami, a zwracany był Id nowo dodanego wydarzenia.
Podsumowanie
Pełny kod aplikacji można pobrać stąd.
Testowanie to ważna sprawa. Bez zautomatyzowanego procesu weryfikacji jakości kodu, nie można stworzyć poprawnie działającego na dłuższą metę rozwiązania. Mam nadzieję, że udało mi się pokazać,; że ASP .NET MVC jest szczególnie pomocne przy budowaniu testowalnych aplikacji.
Jeszcze jedno małe info: kojarzycie digg albo wykop ? okazuje się, że pasjonaci MVC stworzyli klona tego typu serwisu – nazwali go kigg. Co najważniejsze można pobrać pełen kod Ľródłowy z codeplex jego lektura to wprost kopalnia informacji o budowaniu w mvc.