【发布时间】:2009-09-02 13:11:49
【问题描述】:
我的 ASP.NET MVC 应用程序中的菜单 URL 是从控制器/操作生成的。所以,他们打电话
controller.Url.Action(action, controller)
现在,如何在单元测试中进行这项工作? 我成功地使用了 MVCContrib 和
var controller = new TestControllerBuilder().CreateController<OrdersController>();
但无论我尝试用它做什么,我都会得到 controller.Url.Action(action, controller) 失败并出现 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 的全部功能,为什么我需要另一个抽象。
【问题讨论】:
-
本身不值得回答,所以我会指出一个类似的答案:bit.ly/aSJ0a
-
是的,我使用了该链接,但它不起作用。实际上我尝试了 Scott 的版本和 MVCContrib。我试图理解的是我需要设置什么值? Url.Action() 实际使用什么? IE。在您提供的链接上,有一个设置了很多变量的 Moq 版本……它们都是必需的吗?我尝试了所有这些都没有运气。
-
查看有问题的更新...
标签: asp.net-mvc