Eine meiner Controller-Aktionen, die in einer Ajax-Anforderung aufgerufen wird, ist die Rückgabe einer URL an die Clientseite, damit diese eine Umleitung durchführen kann. Ich verwende Url.RouteUrl(..)
und während meiner Unit-Tests schlägt dies fehl, da der Controller.Url
Parameter nicht vorgefüllt ist.
Ich habe viele Dinge ausprobiert, unter anderem versucht zu stubben UrlHelper
(was fehlgeschlagen ist), manuell ein UrlHelper
mit RequestContext
einem zu stubben HttpContextBase
(was bei einem RouteCollection.GetUrlWithApplicationPath
Anruf fehlgeschlagen ist ).
Ich habe Google durchsucht, aber praktisch nichts zu diesem Thema gefunden. Mache ich etwas unglaublich Dummes Url.RouteUrl
in meiner Controller-Aktion? Gibt es einen einfacheren Weg?
Um es noch schlimmer zu machen, möchte ich in der Lage sein, die zurückgegebene URL in meinem Komponententest zu testen. Tatsächlich bin ich nur daran interessiert zu wissen, dass sie auf die richtige Route umleitet, aber da ich eine URL anstelle von a zurückgebe Route möchte ich die URL steuern, die aufgelöst wird (z. B. mithilfe eines Stubbeds RouteCollection
) - aber ich freue mich, wenn mein Test zunächst bestanden wird.
ApplyAppPathModifier
Teil ist das kritische Bit für den UrlHelperEine modifizierte Implementierung von eu-ge-ne. Dieser gibt einen generierten Link zurück, der auf den in der Anwendung definierten Routen basiert. Das Beispiel von eu-ge-ne gab immer eine feste Antwort zurück. Mit dem folgenden Ansatz können Sie testen, ob die richtigen Informationen zu Aktion / Controller und Route an den UrlHelper übergeben werden. Dies möchten Sie, wenn Sie den Aufruf des UrlHelper testen.
quelle
Dieser Beitrag kann nützlich sein, wenn Sie die HttpContextBase-Klasse verspotten möchten.
http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx
quelle
Aufbauend auf der Antwort von @ eu-ge-ne, die mir sehr geholfen hat:
Ich hatte ein ActionResult, das eine Umleitung durchführte, sowie einen UpdateModel-Aufruf mit einem FormCollection-Parameter. Damit das UpdateModel () funktioniert, musste ich dies zu meiner verspotteten HttpRequestBase hinzufügen:
Um zu testen, ob die umgeleitete URL korrekt war, können Sie Folgendes tun:
quelle
http://kbochevski.blogspot.com/2010/06/unit-testing-mvcnet.html erläutert, wie alle Ebenen mit Komponententests abgedeckt werden. Für die Controller-Tests werden Rhino und MVC.Contrib verwendet. Der Quellcode auf Google kann eine große Hilfe sein.
quelle