Одно из моих действий контроллеров, которое вызывается в Ajax-запросе, возвращает URL-адрес клиентской стороне, чтобы он мог выполнить перенаправление. Я использую Url.RouteUrl(..)
и во время моих модульных тестов это не удается, так как Controller.Url
параметр не заполнен предварительно.
Я пробовал много вещей, среди других , пытающегося шлейфа UrlHelper
(который не удался), создавая вручную UrlHelper
с RequestContext
который имеет погасил HttpContextBase
(который не удался на RouteCollection.GetUrlWithApplicationPath
вызов).
Я искал Google, но практически ничего не нашел по этому вопросу. Я делаю что-то невероятно глупое, используя Url.RouteUrl
в своем действии Контроллер? Есть ли более простой способ?
Что еще хуже, я хотел бы иметь возможность проверить возвращенный URL в моем модульном тесте - на самом деле меня интересует только то, что он перенаправляет на правильный маршрут, но так как я возвращаю URL вместо В маршруте я хотел бы контролировать разрешенный URL-адрес (например, с помощью заглушки RouteCollection
), но я буду рад начать тестирование.
ApplyAppPathModifier
часть является критической для UrlHelperМодифицированная реализация от eu-ge-ne. Этот возвращает сгенерированную ссылку на основе маршрутов, определенных в приложении. Пример eu-ge-ne всегда возвращал фиксированный ответ. Приведенный ниже подход позволит вам проверить, что правильное действие / контроллер и информация о маршруте передаются в UrlHelper - это то, что вам нужно, если вы тестируете вызов UrlHelper.
источник
Этот пост может быть полезен, если вы хотите издеваться над классом HttpContextBase.
http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx
источник
Построение ответа @ eu-ge-ne, который мне очень помог:
У меня был ActionResult, который выполнял перенаправление, а также имел вызов UpdateModel с параметром FormCollection. Чтобы UpdateModel () работал, мне нужно было добавить это в мой Mocked HttpRequestBase:
Чтобы проверить правильность перенаправленного URL, вы можете сделать следующее:
источник
http://kbochevski.blogspot.com/2010/06/unit-testing-mvcnet.html обсуждает, как покрыть все слои модульными тестами. Используется Rhino и MVC.Contrib для тестирования контроллеров. Исходный код на Google может оказать большую помощь.
источник