加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC:Mock controller.Url.Action

发布时间:2020-12-15 18:37:05 所属栏目:asp.Net 来源:网络整理
导读:我的ASP.NET MVC应用程序中的菜单的URL为控制器/操作生成。所以他们打电话 controller.Url.Action(action,controller) 现在,我如何使这项工作在单元测试? 我使用MVCContrib成功 var controller = new TestControllerBuilder().CreateControllerOrdersContr
我的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));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读