我正在尝试为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的哪个部分负责设置它,以及如何进入该代码路径?
(我觉得这里完全迷失了,所以如果我正在咆哮错误的树,也请告诉我。)
答案 0 :(得分:1)
答案 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
浏览这个项目的来源(以及其他)已经为我回答了很多问题,我建议你下载源代码并查看单元测试项目,如果没有别的话。