内容简介:http://stackoverflow.com/questions/5943730/asp-net-mvc-controller-unit-testing-problem-with-urlhelper-extension
尝试在我的ASP.NET MVC 3 Web应用程序中进行一些控制器单元测试.
我的测试是这样的:
[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为null,此方法失败.
所以我在嘲笑中做到了这一点:
controller.Url = new UrlHelper(fakeRequestContext);
哪个更进一步,但现在它失败了,因为路由表不包含“Landing_Page”的定义.
所以我知道我需要模拟“什么”,但不知道是否是:
a)路线表
b)UrlHelper.RouteUrl方法
c)我写的UrlHelper.LandingPageWithAnchor扩展方法
任何人都可以提供一些指导吗?
编辑
这个特定的路线是在一个区域,所以我尝试在我的单元测试中呼叫区域注册:
AreaRegistration.RegisterAllAreas();
但是我得到一个InvalidOperationException:
This method cannot be called during the application’s pre-start initialization stage.
通过嘲笑HttpContext,RequestContext和ControllerContext,注册路由,然后使用这些路由创建一个UrlHelper来工作.
有点像这样:
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()是一个Moq帮手,它创建所有的模拟东西,服务器变量,会话等.
http://stackoverflow.com/questions/5943730/asp-net-mvc-controller-unit-testing-problem-with-urlhelper-extension
以上所述就是小编给大家介绍的《c# – ASP.NET MVC控制器单元测试 – UrlHelper扩展的问题》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- java – 在需要身份验证的控制器上运行单元测试
- iOS之导航返回上上个控制器或指定返回某个控制器
- iOS小技巧·把子视图控制器的视图添加到父视图控制器
- javascript – AngularJS控制器错误 – :$http.get不是控制器部分的函数
- AC敏捷控制器及准入控制技术对比
- angularjs – 使用ui-router时,控制器是否可以从父控制器继承范围
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Swift语言实战入门
伍星、罗飞、刘志华、王浩力、刘蕾 / 人民邮电出版社 / 2014-10-23 / 79
《Swift语言实战入门》以Swift语言的基础知识和实战技巧为主要内容,佐以大量的实例和图片进行讲解。全书内容分为三大部分,共11章节。第一大部分讲述Swift语言的基础知识和语法,第二大部分讲解开发框架和库的相关内容,第三大部分集中讲解以2048游戏为例的实战演练,从入门到实战层层递进。本书注重实战,秉承着学以致用的原则,让读者真正看后能够实际操作。120个代码清单全部共享,配套教学视频在线收......一起来看看 《Swift语言实战入门》 这本书的介绍吧!