一、下载MvcContrib(http://mvccontrib.codeplex.com/releases)组件

alt

二、将组件中的三个dll文件加入到自己的测试项目中

alt 

三、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进行相等判断,所以不通过。

六、小结

  在整一个测试过程中,其实就是模拟了一个请求路径,然后与自定义的路由进行匹配,看是否符合。

posted on 2011-05-07 10:22  aparche  阅读(1596)  评论(0编辑  收藏  举报