Una de mis acciones de controladores, una que se llama en una solicitud de Ajax, es devolver una URL al lado del cliente para que pueda hacer una redirección. Estoy usando Url.RouteUrl(..)
y durante mis pruebas unitarias esto falla ya que el Controller.Url
parámetro no está precargado.
He intentado muchas cosas, entre otras que tratan de talón UrlHelper
(que no), crear manualmente una UrlHelper
con una RequestContext
que tiene un apagó HttpContextBase
(que fracasó en una RouteCollection.GetUrlWithApplicationPath
llamada).
Busqué en Google pero no encontré prácticamente nada sobre el tema. ¿Estoy haciendo algo increíblemente estúpido Url.RouteUrl
en mi acción Controlador? hay una manera mas facil?
Para empeorar las cosas, me gustaría poder probar la URL devuelta en mi prueba unitaria; de hecho, solo me interesa saber si está redirigiendo a la ruta correcta, pero dado que estoy devolviendo una URL en lugar de una ruta, me gustaría controlar la URL que se resuelve (por ejemplo, mediante el uso de un trozo RouteCollection
), pero para empezar, estaré encantado de pasar mi prueba.
ApplyAppPathModifier
parte es la parte crítica para el UrlHelperUna implementación modificada de eu-ge-ne. Éste devuelve un enlace generado basado en las rutas definidas en la aplicación. El ejemplo de eu-ge-ne siempre devolvió una respuesta fija. El siguiente enfoque le permitirá probar que la acción / controlador correcto y la información de ruta se transfieren al UrlHelper, que es lo que desea si está probando la llamada al UrlHelper.
fuente
Esta publicación puede ser útil si quieres burlarte de la clase HttpContextBase.
http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx
fuente
A partir de la respuesta de @ eu-ge-ne que me ayudó mucho:
Tuve un ActionResult que hizo una redirección y una llamada UpdateModel con un parámetro FormCollection. Para que el UpdateModel () funcione, tuve que agregar esto a mi HttpRequestBase burlado:
Para probar que la URL redirigida era correcta, puede hacer lo siguiente:
fuente
http://kbochevski.blogspot.com/2010/06/unit-testing-mvcnet.html explica cómo cubrir todas las capas con pruebas unitarias. Utiliza Rhino y MVC.Contrib para las pruebas de los controladores. El código fuente en google puede ser de gran ayuda.
fuente