使用ASP.NET / MVC + MvcMockHelpers + RhinoMocks,谁设置RouteData?

时间:2009-09-11 18:47:08

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

我正在尝试为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依赖于设置一堆值,如“controller”和“action”。

我知道我可以为每个想要调用的控制器方法构建自定义RouteData,但这看起来很愚蠢。 ASP.NET MVC的哪个部分负责设置它,以及如何进入该代码路径?

(我觉得这里完全迷失了,所以如果我正在咆哮错误的树,也请告诉我。)

3 个答案:

答案 0 :(得分:1)

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

This is a decent intro

MVC Contrib项目位于CodePlex

答案 1 :(得分:0)

我建议您将单元测试拆分为路由测试和控制器测试。路由测试将独立于控​​制器测试路由。这使您可以像传统的其他普通旧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/

答案 2 :(得分:0)

建立和测试路线的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

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