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,直接调用就行了

  • 相关阅读:
    target runtime apache v6.0 not defined解决
    java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/jsp/JspApplicationContext;
    The valid characters are defined in RFC 7230 and RFC 3986问题
    invalid END header解决方法
    You have more than one version of ‘org.apache.commons.logging.Log’ visible, which is not allowed问题解决
    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    在eclipse中import java web项目时遇到的一些问题并将该项目通过tomcat发布
    java byte转string 涉及到字节流中有中文
    spring+mybatis框架搭建时遇到Mapped Statements collection does not contain value for...的错误
    试试看读一下Zepto源码
  • 原文地址:https://www.cnblogs.com/ps3online/p/12359309.html
Copyright © 2011-2022 走看看