zoukankan      html  css  js  c++  java
  • C#建立自己的测试用例系统

    引言

    很多时候,需要对类中的方法进行一些测试,来判断是否能按要求输出预期的结果。

    C#提供了快速创建单元测试的方法,但单元测试不仅速度慢不方便,大量的单元测试还会拖慢项目的启动速度。

    所以决定自己搞个方便的测试用例。


    控制台调用

    只需要简简单单的一句话

    测试用例.注册并Print(EnumEx.Name);

    结果画面

    测试用例的实现

       /// <summary>
        /// 提供测试用例的注册和运行功能,用来比对结果和预期值是否相同,向控制台输出结果。
        /// </summary>
        public class 测试用例 {
            /// <summary>
            /// 测试的方法
            /// </summary>
            public Func<string> 方法 { get; set; }
            /// <summary>
            /// 测试名称
            /// </summary>
            public string 名称 { get; set; }
            /// <summary>
            /// 期望得到的结果string
            /// </summary>
            public string 期望值 { get; set; }
            /// <summary>
            /// 新建一个测试
            /// </summary>
            /// <param name="v名称">测试名称</param>
            /// <param name="v期望值">期望得到的结果string</param>
            /// <param name="v方法">测试的方法</param>
            public 测试用例(string v名称, string v期望值, Func<string> v方法) {
                名称 = v名称;
                期望值 = v期望值;
                方法 = v方法;
            }
    
            /// <summary>
            /// 储存所有注册的方法。
            /// </summary>
            public static OrderedDictionary<string, 测试用例> 方法册 = new OrderedDictionary<string, 测试用例>();
    
            /// <summary>
            /// 将「返回值为string的方法〈Func&lt;string&gt;〉」注册到「方法册」中。
            /// </summary>
            /// <param name="测试用例">要注册的测试</param>
            /// <returns>返回是否注册成功</returns>
            public static bool 注册(测试用例 测试用例) {
                return 方法册.添加(测试用例.名称, 测试用例);
            }
    
            /// <summary>
            /// 运行指定名称的测试并返回运行结果〈<see cref="string"/>/// </summary>
            /// <param name="名称">方法注册到测试的名称</param>
            /// <returns>返回运行结果〈<see cref="string"/></returns>
            public static string 运行(string 名称) {
                if (方法册.有键(名称)) {
                   return 方法册[名称].方法.Invoke();
                } else {
                    return 名称 + "   : 不存在该方法!";
                }
            }
            /// <summary>
            /// 注册并向控制台输出运行结果。
            /// </summary>
            /// <param name="测试用例"></param>
            public static void 注册并Print(测试用例 测试用例) {
                if(方法册.添加(测试用例.名称, 测试用例)) {
                    Print(测试用例.名称);
                }
               
            }
            /// <summary>
            /// 向控制台输出运行结果。
            /// </summary>
            /// <param name="测试用例"></param>
            public static void Print(测试用例 测试用例) {
                Print(测试用例.名称);
            }
            /// <summary>
            /// 向控制台输出运行结果。
            /// </summary>
            /// <param name="名称"></param>
            public static void Print(string 名称) {
                string 结果 = 运行(名称);
                string 期望 = 方法册[名称].期望值;
                Console.WriteLine(名称 + "
    Result: "+ 结果);
                Console.Write("期望值: " + 期望);
                if (结果 == 期望) {
                    var c = Console.ForegroundColor;
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine(" [TRUE]");
                    Console.ForegroundColor = c;
                } else {
                    var c = Console.ForegroundColor;
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine(" [FALSE]");
                    Console.ForegroundColor = c;
                }
            }
    
        }

    它可以方便的测试某个方法的返回string是否等于设定期望值

    可以输出到控制台,也可以保存在string。

    要测试的类,位于项目 namespace:

        //************************************************************
        /// <summary>
        /// ◇ 增强 枚举〖System.Enun〗的扩展功能。
        /// </summary>
        /// <seealso cref="Enum"/>
        /// <remarks></remarks>
        //************************************************************
        public static class EnumEx {
            //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
            /// <summary>
            /// 返回枚举 「thisEnum」 的定义名称〈<see cref="string"/>/// </summary>
            /// <param name="thisEnum">该枚举自身</param>
            /// <returns>〈string〉返回枚举的定义名称</returns>
            public static string Name(this Enum thisEnum) {
                return Enum.GetName(thisEnum.GetType(), thisEnum);
            }

    测试用例是这样的,把它放到项目.Test namespace中以避免重名:

    这里填入要显示的名称、期望值、方法体。

    ❶方法体的返回参数必须为 string

    ❷两个用例名称不能相同否则会覆盖。

        /// <summary>
        /// EnumEx的测试用例。
        /// </summary>
        public class EnumEx {
            /// <summary>【测试用例】EnumEx.Name() </summary>
            public static 测试用例 Name = new 测试用例("EnumEx.Name - UriComponents.Path.Name()", "Path", NameFunc);
            /// <summary>【测试方法】UriComponents.Path调用EnumEx.Name() 返回值 ➤ "Path" </summary>
            /// <returns>返回值应该等于"Path"</returns>
            public static string NameFunc() { return UriComponents.Path.Name(); }
        }

    最后在新建控制台应用程序,就叫项目.Test,这样测试有关内容处在相同namespace,直接调用就行了

  • 相关阅读:
    Web存储
    JavaScript模块化
    jQuery挖源码——事件绑定
    观察者模式——JavaScript
    Node.js之网络小爬虫
    ECMAScript的严格模式
    JavaScript和jQuery的事件
    认识Ajax
    Redis之intset数据结构
    Redis之Hash数据结构
  • 原文地址:https://www.cnblogs.com/ps3online/p/12359309.html
Copyright © 2011-2022 走看看