L'une de mes actions de contrôleurs, qui est appelée dans une requête Ajax, renvoie une URL au côté client afin qu'il puisse effectuer une redirection. J'utilise Url.RouteUrl(..)
et pendant mes tests unitaires, cela échoue car le Controller.Url
paramètre n'est pas pré-rempli.
J'ai essayé beaucoup de choses, entre autres en essayant de stub UrlHelper
(qui a échoué), en créant manuellement un UrlHelper
avec un RequestContext
qui a un stubbed HttpContextBase
(qui a échoué sur un RouteCollection.GetUrlWithApplicationPath
appel).
J'ai cherché sur Google mais je n'ai pratiquement rien trouvé sur le sujet. Est-ce que je fais quelque chose d'incroyablement stupide en utilisant Url.RouteUrl
mon action de contrôleur? Y a-t-il un moyen plus simple?
Pour aggraver les choses, j'aimerais pouvoir tester l'URL renvoyée dans mon test unitaire - en fait, je suis seulement intéressé à savoir qu'il redirige vers la bonne route, mais puisque je retourne une URL au lieu d'un route, je voudrais contrôler l'URL qui est résolue (par exemple en utilisant un stubbed RouteCollection
) - mais je serai heureux de faire passer mon test pour commencer.
ApplyAppPathModifier
partie est le bit critique pour UrlHelperUne implémentation modifiée de eu-ge-ne. Celui-ci retourne un lien généré en fonction des routes définies dans l'application. L'exemple d'eu-ge-ne retournait toujours une réponse fixe. L'approche ci-dessous vous permettra de tester que l'action / le contrôleur et les informations de route corrects sont passés dans UrlHelper - ce que vous voulez si vous testez l'appel à UrlHelper.
la source
Cet article peut être utile si vous souhaitez vous moquer de la classe HttpContextBase.
http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx
la source
S'appuyant sur la réponse de @ eu-ge-ne qui m'a beaucoup aidé:
J'ai eu un ActionResult qui a fait une redirection ainsi qu'un appel UpdateModel avec un paramètre FormCollection. Pour que UpdateModel () fonctionne, je devais ajouter ceci à mon HttpRequestBase simulé:
Pour vérifier que l'URL redirigée était correcte, vous pouvez effectuer les opérations suivantes:
la source
http://kbochevski.blogspot.com/2010/06/unit-testing-mvcnet.html explique comment couvrir toutes les couches avec des tests unitaires. Il utilise Rhino et MVC.Contrib pour les tests des contrôleurs. Le code source sur google peut être d'une grande aide.
la source