问题与UrlHelper扩展

问题与UrlHelper扩展

本文介绍了ASP.NET MVC控制器单元测试 - 问题与UrlHelper扩展的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

试图做一些控制器在我的ASP.NET MVC 3 Web应用程序单元测试。

我的测试是这样的:

  [TestMethod的]
公共无效Ensure_CreateReviewHttpPostAction_RedirectsAppropriately()
{
   //安排。
   变种newReview = CreateMockReview();   //法案。
   VAR的结果= _controller.Create(newReview)为RedirectResult;   //断言。
   Assert.IsNotNull(结果,RedirectResult不退换);
}

pretty简单。基本上测试 [HttpPost] 行动,以确保它返回一个 RedirectResult (PRG模式)。我没有使用 RedirectToRouteResult 因为没有超载的支持锚链接。上移动。

现在,我使用的起订量以嘲笑HTTP上下文,包括服务器变量,控制器上下文,会话等一切正常为止。

直到我已经打了这条线在我的操作方法:

 返回重定向(Url.LandingPageWithAnchor(someObject.Uri,review.Uri);

LandingPageWithAnchor 是一个自定义的HTML帮助:

 公共静态字符串LandingPageWithAnchor(这UrlHelper帮手,串uri1,串uri2)
{
   常量字符串网址格式={0}#{1};   返回的String.Format(网址格式,
                helper.RouteUrl(LANDING_PAGE,新的{URI = uri1})
                uri2);
}

基本上,我重定向到另一个网页,其中一个是登陆页的新内容,对新的审查锚。酷。

现在,这个方法之前,因为 UrlHelper 为null失败。

所以我做这在我的嘲弄:

  controller.Url =新UrlHelper(fakeRequestContext);

这得到了进一步,但现在它的失败,因为路由表不包含定义LANDING_PAGE。

所以我知道我需要模拟东西,但林不知道,如果它是:

一)路由表


二)UrlHelper.RouteUrl方法


三)UrlHelper.LandingPageWithAnchor扩展方法我写了

任何人都可以提供一些指导?

修改

这特别的路线是在,所以我打过电话的区域登记我的单元测试:

  AreaRegistration.RegisterAllAreas();

但我得到一个出现InvalidOperationException

解决方案

Got it working by mocking the HttpContext, RequestContext and ControllerContext, registering the routes then creating a UrlHelper with those routes.

Goes a little like this:

public static void SetFakeControllerContext(this Controller controller, HttpContextBase httpContextBase)
{
    var httpContext = httpContextBase ?? FakeHttpContext().Object;
    var requestContext = new RequestContext(httpContext, new RouteData());
    var controllerContext = new ControllerContext(requestContext, controller);
    MvcApplication.RegisterRoutes();
    controller.ControllerContext = controllerContext;
    controller.Url = new UrlHelper(requestContext, RouteTable.Routes);
}

FakeHttpContext() is a Moq helper which creates all the mock stuff, server variables, session, etc.

这篇关于ASP.NET MVC控制器单元测试 - 问题与UrlHelper扩展的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-14 09:11