一、下载MvcContrib(http://mvccontrib.codeplex.com/releases)组件
二、将组件中的三个dll文件加入到自己的测试项目中
三、MVC项目中要被测试的Global.asax.cs中的代码如下:其中有一个是默认的路由,有一个是自定义的路由(需要测试的)
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"about", // Route name
"about/{id}", // URL with parameters
new { controller = "Home", action = "About", id = "" } // Parameter defaults
);
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);
}
}
四、在测试项目中添加一个类(MvcRouteTest.cs),用来测试路由是否正确,代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Web.Routing;
using MvcContrib.TestHelper.Fakes;
using System.Web.Mvc;
namespace UI.Tests
{
[TestClass()]
public class MvcRouteTest
{
[TestMethod()]
public void DefaultRouteTest()
{
RouteCollection routes = new RouteCollection();//1、创建一个RouteCollection
var context = new FakeHttpContext("~/");//2、利用MvcContrib提供的FakeHttpContext类,创建一个HttpContext(本代码看做是有个用户请求默认的路由)
MvcApplication.RegisterRoutes(routes);//3、调用需要测试的路由类的RegisterRoutes,routes将得到相关的route资料
var routeData = routes.GetRouteData(context);//4、找到与创建的请求符合要求的路由规则
//5、判断该规则是否和预期的符合
Assert.AreEqual("Home", routeData.Values["controller"]);
Assert.AreEqual("Index", routeData.Values["action"]);
Assert.AreEqual("", routeData.Values["id"]);
}
[TestMethod()]
public void AboutRouteTest()
{
RouteCollection routes = new RouteCollection();//1、创建一个RouteCollection
var context = new FakeHttpContext("~/about/1");//2、利用MvcContrib提供的FakeHttpContext类,创建一个HttpContext(本代码看做是有个用户请求about路由)
MvcApplication.RegisterRoutes(routes);//3、调用需要测试的路由类的RegisterRoutes,routes将得到相关的route资料
var routeData = routes.GetRouteData(context);//4、找到与创建的请求符合要求的路由规则
//5、判断该规则是否和预期的符合
Assert.AreEqual("Home", routeData.Values["controller"]);
Assert.AreEqual("About", routeData.Values["action"]);
Assert.AreEqual("1", routeData.Values["id"]);
}
}
}
其上有两个测试方法,第一个是测试默认路由的方法,第二个是测试自定义的about路由的方法。
五、如何测试?
其实很简单,将光标放到要测试的方法范围内,点击“运行当前上下文中的测试”或使用快捷键Ctrl+R+T,就开始对光标所在方法进行测试,测试完后就可以看到结果。
在about测试方法里面修改代码var context = new FakeHttpContext("~/about/1");中的("~/about/1")改为("~/about"),测试结果就不会通过,因为("~/about")表示请求的id为默认值“”,而在断言判断的时候又是与1进行相等判断,所以不通过。
六、小结
在整一个测试过程中,其实就是模拟了一个请求路径,然后与自定义的路由进行匹配,看是否符合。