在创建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 = ""

