170 votes

ASP.NET MVC : Unit testing contrôleurs qui utilisent UrlHelper

Un de mes contrôleurs d'actions, de celui qui est appelé dans une requête Ajax, est de retour d'une URL vers le côté client, donc il peut faire une redirection. Je suis à l'aide d' Url.RouteUrl(..) et au cours de mes tests d'unité d'échec depuis l' Controller.Url paramètre n'est pas pré-rempli.

J'ai essayé beaucoup de choses, entre autres de tenter de stub UrlHelper (qui a échoué), la création manuelle d'un UrlHelper avec un RequestContext qui a écrasé HttpContextBase (qui a échoué sur un RouteCollection.GetUrlWithApplicationPath appel).

J'ai cherché sur Google, mais trouve pratiquement rien sur le sujet. Suis-je en train de faire quelque chose d'incroyablement stupide à l'aide de Url.RouteUrl dans mon Contrôleur de l'action? Est-il un moyen plus facile?

Pour le rendre encore pire, je voudrais être en mesure de tester le retour de l'URL dans mon test de l'unité - en fait, je suis seulement intéressé dans le fait de savoir que la redirection vers la bonne voie, mais depuis que je suis de retour d'une URL au lieu d'une route, je voudrais contrôler l'URL qui est résolu (eg. à l'aide d'un écrasé RouteCollection) - mais je serai heureux de faire mon test de passage pour commencer.

202voto

eu-ge-ne Points 17847

Voici une de mes tests (xUnit + Moq) juste pour le cas similaire (à l’aide de la Url.RouteUrl au contrôleur)

Espérons que cette aide :

37voto

Steven Pena Points 752

Une mis à jour le mise en oeuvre de l’Union européenne-ge-ne. Celle-ci renvoie un lien généré selon les itinéraires définis dans la demande. exemple de l’Union européenne-ge-ne retournait toujours une réponse fixe. L’approche ci-dessous vous permettra de tester que les informations correctes de l’action/contrôleur et l’itinéraire sont passées dans le UrlHelper - qui est ce que vous voulez si vous testez un appel à la UrlHelper.

12voto

Gerardo Contijoch Points 966

Ce poste peut être utile si vous souhaitez simuler classe HttpContextBase.

http://www.Hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx

2voto

woopstash Points 346

Construction hors la réponse de @eu-ge-ne qui m’a beaucoup aidé :

J’ai eu un ActionResult qui a fait une redirection comme a eu un appel UpdateModel avec un paramètre FormCollection. Pour la UpdateModel() au travail j’ai dû ajouter à mon HttpRequestBase moqué :

Pour vérifier que l’URL redirigée était correcte, vous pouvez procéder comme suit :

1voto

hurbata Points 21

http://kbochevski.blogspot.com/2010/06/Unit-testing-mvcnet.html explique comment faire pour couvrir tous les calques avec les tests unitaires. Il utilise Rhino et MVC. Contrib pour les contrôleurs de test. Le code source sur google peut être d’une grande aide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X