对自定义路由进行单元测试

2008-07-28 15:43:41.0     浏览:707     来源:中国IT实验室
关键词:  路由     单元测试  

在创建ASP.NET MVC应用程序时,如果你是忠于测试驱动开发的,你应该对所有东西进行单元测试。先编写单元测试,再编写代码来满足测试。重复、重复、重复到吐。

路由是MVC应用程序中的重要部分。路由决定了一个URL如何映射到特定的控制器和控制器操作。由于路由在MVC应用程序中如此重要,所以你需要为路由编写单元测试。在这个Tip中,我将向你展示如何通过仿制HTTP Context来为路由编写单元测试。

创建路由表

你可以在Global.asax文件中为MVC应用程序创建路由。换句话说,它们是定义在GlobalApplication类中的。清单1包含了默认的Global.asax文件。

清单1 - Global.asax using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace DefaultOne
{
public class GlobalApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}


默认情况下,一个路由包括名字、路径和默认路由。路由得到一个URL后会将其中的不同片段映射到特定的控制器、控制器操作和传递给操作的参数上。如:

/Customer/Details/23
Controller = Customer
Action = Details
Id = 23

URL中的第一个片段被映射到控制器名字,第二部分被映射到控制器操作,而最后一部分被映射到名字为Id的参数。

Default路由包含了默认值。如果没有指定控制器,则使用Home控制器。如果没有指定操作,则调用Index操作。如果没有指定Id,则传第一个空字符串。因此,下面的URL将被这样解释:

Controller = Home
Action = Index
Id = ""

[第1页]   [第2页]   [第3页]   [下一页]