Una de mis acciones de controladores, una que se llama en una solicitud Ajax, devuelve una URL al lado del cliente para que pueda hacer una redirección. Estoy usando Url.RouteUrl(..)
y durante mis pruebas de la unidad esto falla ya que el parámetro Controller.Url
no se llena previamente.ASP.NET MVC: Controladores de pruebas unitarias que usan UrlHelper
He intentado muchas cosas, entre otras que tratan de código auxiliar UrlHelper
(que no), la creación manual de un UrlHelper
con un RequestContext
que tiene un stubbed HttpContextBase
(que no está en una llamada RouteCollection.GetUrlWithApplicationPath
).
He buscado en Google pero no he encontrado prácticamente nada sobre el tema. ¿Estoy haciendo algo increíblemente estúpido usando Url.RouteUrl
en mi acción de controlador? hay una manera mas facil?
Para empeorar las cosas, me gustaría poder probar la URL devuelta en mi prueba de unidad; de hecho, solo estoy interesado en saber que está redireccionando a la ruta correcta, pero dado que estoy devolviendo un URL en lugar de una ruta, me gustaría controlar la URL que se resuelve (por ejemplo, utilizando un stubbed RouteCollection
), pero me alegrará obtener mi prueba de aprobación para comenzar.
Por el momento me fui con una solución en la que abstrae las llamadas a UrlHelper para que pueda interceptarlos. Gracias por su fragmento, sin embargo, me ahorrará mucho tiempo tratando de encontrar una manera correcta de burlar un Request/Response/ControllerContext. – efdee
Gracias por la respuesta @ eu-ge-ne, me ayudó mucho también. He incluido algunas configuraciones moq más para usar un parámetro formcollection utilizado por UpdateModel – woopstash
+1 excelente. Aunque un consejo: lo utilizo como un MockHelper y cambio la respuesta. Configuro para ApplyAppPathModifier a esto: response.Setup (x => x.ApplyAppPathModifier (Moq.It.IsAny())).Devuelve ((String url) => url); Es feo, pero recupero el objeto serializado en formato de url codificado, en lugar de codificar el valor devuelto. –
eduncan911