Jedna z moich akcji kontrolera, która jest wywoływana w żądaniu Ajax, zwraca adres URL po stronie klienta, aby mógł wykonać przekierowanie. Używam Url.RouteUrl(..)
i podczas moich testów jednostkowych kończy się to niepowodzeniem, ponieważ Controller.Url
parametr nie jest wstępnie wypełniony.
Próbowałem wielu rzeczy, między innymi próbując odgiąć UrlHelper
(co nie powiodło się), ręcznie tworząc UrlHelper
z a, RequestContext
które ma odgałęzienie (co nie HttpContextBase
powiodło się podczas RouteCollection.GetUrlWithApplicationPath
połączenia).
Przeszukałem Google, ale nie znalazłem praktycznie nic na ten temat. Czy robię coś niesamowicie głupiego, używając Url.RouteUrl
mojej akcji kontrolera? Czy istnieje prostszy sposób?
Co gorsza, chciałbym móc przetestować zwrócony adres URL w moim teście jednostkowym - w rzeczywistości interesuje mnie tylko to, że przekierowuje na właściwą trasę, ale ponieważ zwracam adres URL zamiast trasy, chciałbym kontrolować adres URL, który jest rozwiązywany (np. za pomocą kodu skróconego RouteCollection
) - ale będę szczęśliwy, gdy mój test przejdzie pomyślnie.
ApplyAppPathModifier
część jest krytyczna dla UrlHelperZmodyfikowana implementacja z eu-ge-ne. Ten zwraca wygenerowany link na podstawie tras zdefiniowanych w aplikacji. Przykład eu-ge-ne zawsze zwracał stałą odpowiedź. Poniższe podejście pozwoli Ci przetestować, czy prawidłowe działanie / kontroler i informacje o trasie są przekazywane do UrlHelper - co chcesz, jeśli testujesz wywołanie UrlHelper.
źródło
Ten wpis może być przydatny, jeśli chcesz mockować klasę HttpContextBase.
http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx
źródło
Opierając się na odpowiedzi @ eu-ge-ne, która bardzo mi pomogła:
Miałem ActionResult, który wykonał przekierowanie, a także wywołanie UpdateModel z parametrem FormCollection. Aby UpdateModel () działał, musiałem dodać to do mojego Mocked HttpRequestBase:
Aby sprawdzić, czy przekierowany adres URL był poprawny, możesz wykonać następujące czynności:
źródło
http://kbochevski.blogspot.com/2010/06/unit-testing-mvcnet.html omawia, jak pokryć wszystkie warstwy testami jednostkowymi. Wykorzystuje Rhino i MVC.Contrib do testowania kontrolerów. Kod źródłowy w Google może być bardzo pomocny.
źródło