【问题标题】:With ASP.NET/MVC + MvcMockHelpers + RhinoMocks, who sets RouteData?使用 ASP.NET/MVC + MvcMockHelpers + RhinoMocks,谁来设置 RouteData?
【发布时间】:2009-09-11 18:47:08
【问题描述】:

我正在尝试为 ASP.NET MVC 控制器方法编写测试。我有 RhinoMocks(因为它似乎是最受欢迎和最受支持的)和 MvcMockHelpers(因为我似乎需要它)。

我的测试方法如下:

var controller = new MyController();
MvcMockHelpers.SetFakeControllerContext(mocks, controller);
mocks.ReplayAll();
var result = controller.MyAction(arg1, arg2);
// then i'd make assertions on the result

这不起作用,因为 RouteData 没有条目,而 MyAction 依赖于在那里设置一堆值,例如“控制器”和“动作”。

我知道我可以为我想要调用的每个控制器方法构建一个自定义 RouteData,但这似乎很愚蠢。 ASP.NET MVC 的哪一部分负责设置这个,我怎样才能进入那个代码路径?

(我感觉完全迷路了,所以如果我叫错了树,也请告诉我。)

【问题讨论】:

    标签: c# asp.net-mvc unit-testing rhino-mocks


    【解决方案1】:

    我发现使用 RhinoMocks 的 MvcContrib Test Helper 运气最好。

    This is a decent intro

    MVC Contrib 项目位于CodePlex

    【讨论】:

      【解决方案2】:

      我建议您将单元测试拆分为路由测试和控制器测试。路由测试将独立于控​​制器测试路由。这让您可以像任何其他普通的旧 CSharp 方法一样以常规方式测试您的控制器。

      Phil Haack 和 Adam Tybor 撰写了关于如何测试路线的好文章:

      在 ASP.NET MVC 中测试路由
      http://haacked.com/archive/2007/12/17/testing-routes-in-asp.net-mvc.aspx

      使用 Rhino Mocks 测试路线
      http://abombss.com/blog/2007/12/10/ms-mvc-testing-routes/

      【讨论】:

      • 我并不想测试路由——我只是想设置 RouteData 以便我的控制器能够运行。但是控制器依赖于 ASP.NET MVC 为我设置的一堆状态(比如 RouteData,但显然还有一堆其他的东西)。为控制器接触的一切简单地编写模拟是公认的方式吗?这听起来不错,但可能需要做很多工作(尤其是在编写应用程序时没有考虑到这一点)。让 ASP.NET MVC 运行它的正常响应例程,然后把结果交给我是不是很难?
      • Sam 建议的 MVCContrib 助手似乎可以满足您的需求。
      【解决方案3】:

      您可能会对 CodeCampServer 构建和测试路线的方式感兴趣。

      RouteConfigurator:(注意每次调用 RegisterRoutes() 时都会清除路由——MVCContrib 路由测试助手需要)http://code.google.com/p/codecampserver/source/browse/trunk/src/UI/RouteConfigurator.cs

      IncomingRouteTester:使用 MVCContrib 路由测试扩展来高效测试路由:http://code.google.com/p/codecampserver/source/browse/trunk/src/UnitTests/UI/Routes/IncomingRouteTester.cs

      浏览这个项目的源代码(以及其他)已经回答了我很多问题,如果没有其他问题,我建议您下载源代码并查看单元测试项目。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多