Один из моих действий с контроллерами, вызываемый в запросе Ajax, возвращает URL-адрес на стороне клиента, чтобы он мог перенаправлять. Я использую Url.RouteUrl(..)
, и во время моих модульных тестов это не срабатывает, поскольку параметр Controller.Url
не заполняется заранее.ASP.NET MVC: Контроллеры модулей тестирования, использующие UrlHelper
Я пробовал много вещей, среди других, пытающихся окурок UrlHelper
(который не удалось), создавая UrlHelper
вручную с RequestContext
который имеет погасил HttpContextBase
(который не удалось на RouteCollection.GetUrlWithApplicationPath
вызова).
Я искал Google, но практически ничего не нашел по этому вопросу. Я делаю что-то невероятно глупо, используя Url.RouteUrl
в моем контролере? Есть ли более простой способ?
Чтобы сделать это еще хуже, я хотел бы проверить тестовый результат в моем модульном тесте - на самом деле мне интересно только, чтобы он перенаправлялся на правильный маршрут, но поскольку я возвращаю URL вместо маршрута, я хотел бы управлять URL-адресом, который разрешен (например, с помощью заштрихованного RouteCollection
), но я с удовольствием пройду свой тест.
В настоящее время я пошел с решением, где я отвлек звонки на UrlHelper, чтобы я мог их перехватить. Однако, спасибо за ваш фрагмент, это избавит меня от времени, чтобы выяснить, как правильно издеваться над Request/Response/ControllerContext. – efdee
Спасибо за ответ @ eu-ge-ne, это тоже помогло мне. Я включил еще несколько настроек moq, чтобы использовать параметр formcollection, используемый UpdateModel – woopstash
+1 отлично. Хотя совет: я использую это как MockHelper и изменяю ответ. Для приложения ApplyAppPathModifier: response.Setup (x => x.ApplyAppPathModifier (Moq.It.IsAny())).Возвращает ((String url) => url); Это уродливо, но я возвращаю сериализованный объект в кодировке url, а не hardcoding возвращаемое значение. –
eduncan911