我的ASP.NET MVC应用程序中的菜单的URL为控制器/操作生成。所以他们打电话
controller.Url.Action(action,controller)
现在,我如何使这项工作在单元测试?
我使用MVCContrib成功
var controller = new TestControllerBuilder().CreateController<OrdersController>();
但是无论我尝试使用它,我得到controller.Url.Action(操作,控制器)失败与NullReferenceException因为Url == null。
更新:它不是关于如何拦截HttpContext。我以几种方式做到这一点,使用MVCContrib,Scott Hanselman的伪造例子,还有一个来自http://stephenwalther.com/blog/archive/2008/07/01/asp-net-mvc-tip-12-faking-the-controller-context.aspx的例子。这并不能帮助我,因为我需要知道什么是值得冒犯的… ApplicationPath?如何设置?是否需要匹配被叫控制器/动作?也就是说,Url.Action如何工作,如何满足?
此外,我知道我可以做IUrlActionAbstraction并与它一起去…但我不知道我想做这个。毕竟,我有MVCContrib / Mock全功能,为什么我需要另一个抽象。
解决方法
以下是如何使用MvcContrib的TestControllerBuilder来模拟UrlHelper:
var routes = new RouteCollection(); MvcApplication.RegisterRoutes(routes); HomeController controller = CreateController<HomeController>(); controller.HttpContext.Response .Stub(x => x.ApplyAppPathModifier("/Home/About")) .Return("/Home/About"); controller.Url = new UrlHelper( new RequestContext( controller.HttpContext,new RouteData() ),routes ); var url = controller.Url.Action("About","Home"); Assert.IsFalse(string.IsNullOrEmpty(url));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。