Testowanie – ASP .NET MVC część 4

W cyklu poświęconycm ASP .NET MVC do tej pory:

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.

image

Następnie zmienię kontrolery, tak żeby można je zainicjalizować z dowolną klasą implementującą IWydarzeniaMVCDataContext:

image

image

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:

image

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

image

Do testowania trzeba stworzyć mocki, która udają środowisko serwera WWW i danych:

image

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:

image

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ń:

image

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.