Попытка выполнить несколько контроллеров модульного тестирования в моем веб-приложении ASP.NET MVC 3.
Мой тест выглядит так:
[TestMethod]
public void Ensure_CreateReviewHttpPostAction_RedirectsAppropriately()
{
// Arrange.
var newReview = CreateMockReview();
// Act.
var result = _controller.Create(newReview) as RedirectResult;
// Assert.
Assert.IsNotNull(result, "RedirectResult was not returned");
}
Довольно просто,В основном тестирование действия [HttpPost]
, чтобы убедиться, что оно возвращает RedirectResult
(паттерн PRG).Я не использую RedirectToRouteResult
, потому что ни одна из перегрузок не поддерживает якорные ссылки.Двигаемся дальше.
Теперь я использую Moq для насмешки контекста Http, включая переменные сервера, контекст контроллера, сеанс и т. Д. Пока все идет хорошо.
Пока я не наткнулся на эту строку в своем методе действия:
return Redirect(Url.LandingPageWithAnchor(someObject.Uri, review.Uri);
LandingPageWithAnchor
- это пользовательский помощник HTML:
public static string LandingPageWithAnchor(this UrlHelper helper, string uri1, string uri2)
{
const string urlFormat = "{0}#{1}";
return string.Format(urlFormat,
helper.RouteUrl("Landing_Page", new { uri = uri1}),
uri2);
}
По сути, я перенаправляю на другую страницу, которая является«целевая страница» для нового контента, с привязкой к новому обзору.Круто.
Теперь этот метод не удался раньше, потому что UrlHelper
был нулевым.
Итак, я сделал это в своей насмешке:
controller.Url = new UrlHelper(fakeRequestContext);
Что дало ему дальнейшее развитие,но теперь он терпит неудачу, потому что таблицы маршрутов не содержат определения для «Landing_Page».
Так что я знаю, что мне нужно высмеять «что-то», но я не уверен, что это:
a) Таблицы маршрутовб) метод UrlHelper.RouteUrlc) Метод расширения UrlHelper.LandingPageWithAnchor, который я написал
Может ли кто-нибудь дать некоторые рекомендации?
РЕДАКТИРОВАТЬ
Этот конкретный маршрут находится в Площадь , поэтому я попытался вызвать регистрацию области в моем модульном тесте:
AreaRegistration.RegisterAllAreas();
Но я получаю InvalidOperationException
:
Этот метод не может быть вызван во времяПредварительная стадия инициализации приложения.