Пытаюсь провести модульное тестирование контроллера в моем веб-приложении 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.RouteUrl