zoukankan      html  css  js  c++  java
  • MVC开发单元测试小工具 —— 搜寻还没写单元测试的方法

    方法比较笨,有更好的建议可以提。

    写这个工具呢,因为要写单元测试,保证代码质量,方便修改维护。一切为了自己方便。当然这个算是个人开发的项目

    1、MVC中控制器建立个基类(这个光明正大的抄袭的),控制往前端传输的数据格式

    2、所有控制器继承这个基类

    3、在单元测试项目建立自定义特性,方便关联搜寻(我是没找到更好的办法关联,VS肯定是有关联的,奈何我找不到,各位有好的建议可以提)

    4、写单元测试并加上特性

    5、写小工具

    6、小工具获取两个项目之间已存在的方法进行筛选。大概就下面这样吧。当然前提引用两个项目的程序集

     /// <summary>
        /// 测试用例没写到的方法
        /// </summary>
        public class NotTestFun
        {
            public List<string> GetNotTestFun()
            {
                //web程序集中控制器的方法
                List<string> controllerFun = new List<string>();
                //单元测试程序集中的测试方法
                List<string> testControllerFun = new List<string>();
                //还没写单元测试的方法
                List<string> notTestFun = new List<string>();
    
                Assembly assembly = Assembly.Load("Manage.Web");
                Assembly assembly2 = Assembly.Load("Manage.Web.Tests");
                controllerFun = assemblyFun(assembly);
                testControllerFun = assemblyFunTest(assembly2);
                foreach (var item in controllerFun)
                {
                    string a = item;
                    foreach (var item2 in testControllerFun)
                    {
                        if (item==item2)
                        {
                            a = "";
                        }
                    }
                    if (a!="")
                    {
                        notTestFun.Add(a);
                    }
                }
                return notTestFun;
            }
            /// <summary>
            /// 获取web程序集中所有继承自写基类控制器的方法
            /// 自写基类控制器 MvcControllerBase
            /// </summary>
            /// <returns></returns>
            public List<string> assemblyFun(Assembly assembly)
            {
                List<string> controller = new List<string>();
                List<string> controllerFun = new List<string>();
                Type[] types = assembly.GetTypes();
                Type aType = typeof(MvcControllerBase);
                List<MvcControllerBase> alist = new List<MvcControllerBase>();
                foreach (Type type in types)
                {
                    if (type.BaseType.Name == "MvcControllerBase" &&
                        type.BaseType.FullName == "Manage.Web.Controllers.MvcControllerBase"
                        )
                    {
                        controller.Add(type.Name);
                        //获取控制的所有方法
                        foreach (var item in type.GetMethods())
                        {
                            //是视图控制器
                            if (item.ReturnType.Equals(typeof(System.Web.Mvc.ActionResult))
                                &&
                             item.DeclaringType.Name != "MvcControllerBase"
                                )
                            {
                                controllerFun.Add(type.Name + "." + item.Name);
                            }
                        }
                    }
    
                }
                return controllerFun;
            }
            /// <summary>
            /// 获取单元测试中的测试方法
            /// 根据自写特性关联控制器
            /// </summary>
            /// <returns></returns>
            public List<string> assemblyFunTest(Assembly assembly)
            {
                List<string> controller = new List<string>();
                List<string> controllerFun = new List<string>();
                Type[] types = assembly.GetTypes();
                Type aType = typeof(MvcControllerBase);
                List<MvcControllerBase> alist = new List<MvcControllerBase>();
                foreach (Type type in types)
                {
                    controller.Add(type.Name);
                    //获取控制的所有方法
                    foreach (var item in type.GetMethods())
                    {
                        //CustomAttributes特性有2个,一个是TestMethod一个是TestAttr
                        //不同程序可自调
                        CustomAttributeData cd = item.CustomAttributes.SingleOrDefault(a => a.AttributeType == typeof(TestAttr));
                        if (cd!=null)
                        {
                            var list = cd.NamedArguments.ToList();
                            controllerFun.Add(list[0].TypedValue.Value.ToString());
                        }
                    }
                }
                return controllerFun;
            }
        }
    

      

    ------------------这是特性和单元测试----------------------------------  
    
    /// <summary>
        /// 此特性用于开发小工具查看未写到的测试方法
        /// </summary>
        [AttributeUsage(AttributeTargets.Method)]
        public class TestAttr : Attribute {
            public string TestClassFun { get; set; }
        }
      [TestMethod]
           [TestAttr(TestClassFun= "TeamController.Index")]
            public void Index()
            {
                ViewResult result = controller.Index() as ViewResult;
                Microsoft.VisualStudio.TestTools.UnitTesting.Assert.IsNotNull(result);
            }
    

      

  • 相关阅读:
    Lambda表达式详解 (转)
    usb驱动开发21之驱动生命线
    usb驱动开发18之设备生命线
    usb驱动开发17之设备生命线
    usb驱动开发16之设备生命线
    usb驱动开发15之设备生命线
    usb驱动开发14之设备生命线
    usb驱动开发13之设备生命线
    usb驱动开发12之设备生命线
    usb驱动开发11之设备生命线
  • 原文地址:https://www.cnblogs.com/bklsj/p/13183846.html
Copyright © 2011-2022 走看看