如何测试UrlHelper.RouteUrl()?

时间:2010-05-24 06:01:43

标签: asp.net asp.net-mvc unit-testing controller

我正在努力弄清楚我需要在测试中模拟我需要模拟UrlHelper.RouteUrl()返回正确的URL。它有效,但我希望有正确的测试覆盖率。控制器方法的内容如下所示:

var urlHelper = new UrlHelper(ControllerContext.RequestContext);
return Json(new BasicJsonMessage { Result = true, 
   Redirect = urlHelper.RouteUrl(new { controller = "TheController", 
   action = "TheAction", 
   id = somerecordnumber }) });

测试结果对象很简单,如下所示:

var controller = new MyController();
var result = controller.DoTheNewHotness());
Assert.IsInstanceOf<JsonResult>(result);
var data = (BasicJsonMessage)result.Data;
Assert.IsTrue(data.Result);

result.Redirect始终为null,因为控制器显然对路由一无所知。我需要对控制器做什么让它知道?正如我所说,我知道它在我运用生产代码时有效,但我想要一些测试保证。谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

听起来我觉得你正在尝试测试一些调用UrlHelper的代码,而不是测试框架的UrlHelper本身的功能。如果是这种情况,那么这个答案ASP.NET MVC: Unit testing controllers that use UrlHelper对我来说非常有用。

答案 1 :(得分:1)

UrlHelper.RouteUrl()不是框架方法吗?这是.NET团队的测试责任,而不是你的!

您可能想要做的是对路由配置进行单元测试。 This question真的很老(MVC Beta 1),但答案可能仍然有效。 Phil HaackRouting Debugger永远在你身边。如果这还不够,谷歌还有很多其他选择。