zoukankan      html  css  js  c++  java
  • Asp.net Mvc对自定义路由进行测试

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

    六、小结

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

  • 相关阅读:
    D. Minimax Problem
    Codeforces Round #592 (Div. 2) D,E
    Codeforces Round #587 (Div. 2) C
    Codeforces Round #587 (Div. 3) E
    Educational Codeforces Round 73 (Rated for Div. 2)
    HDU1247(Hat’s Words)
    HDU1251(统计难题)(字典树模板题
    HDU1525(Euclid's Game)规律博弈
    Find the answer
    Fansblog
  • 原文地址:https://www.cnblogs.com/tianguook/p/2039625.html
Copyright © 2011-2022 走看看