引言

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

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(名称 + "\r\nResult: "+ 结果);
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,直接调用就行了

C#建立自己的测试用例系统的更多相关文章

  1. 【Unity Shaders】使用Unity Render Textures实现画面特效——建立画面特效脚本系统

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  2. Maven实战(Maven+Nexus建立私服【Linux系统】)

    准备工作 下载及配置Maven3:http://www.cnblogs.com/leefreeman/archive/2013/03/05/2944519.html 下载Nexus:http://ne ...

  3. SublimeText 建立构建Node js系统

    Sublime Text 3 构建系统:https://www.sublimetext.com/docs/3/build_systems.html 注意: 文档中出现的 shell_cmd 和 cmd ...

  4. 用Linux建立多应用系统备份服务器

    用Linux建立多应用系统备份服务器 本文旨在结合自己的工作实际,利用LinuxFTP服务器建立了一个多系统备份服务器异地备份策略. 1 建立LinuxFTP服务器 使用了Red Hat Enterp ...

  5. 建立apk定时自动打包系统第一篇——Ant多渠道打包并指定打包目录和打包日期

    ​团队开发时,每天都需要输出一个apk包给其它部门的同事测试验证.打包几乎是每天必须完成的功课.如果用IDE来输出apk,那速度是非常慢的,如果还需要有不同渠道的apk包,那程序猿都要疯了.当然也有用 ...

  6. 欢迎阅读daxnet的新博客:一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统

    2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为"希赛网" ...

  7. 利用WCF的双工通讯实现一个简单的心跳监控系统

    何为心跳监控系统? 故名思义,就是监控某个或某些个程序的运行状态,就好比医院里面的心跳监视仪一样,能够随时显示病人的心跳情况. 心跳监控的目的是什么? 与医院里面的心跳监视仪目的类似,监控程序运行状态 ...

  8. 一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统

    2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为“希赛网”)个人空间发布过一些 ...

  9. 深入解析Windows操作系统笔记——CH3系统机制

    3.系统机制 微软提供了一些基本组件让内核模式的组件使用: 1.陷阱分发,包括终端,延迟的过程调用(DPC),异步过程调用(APC),异常分发以及系统服务分发 2.执行体对象管理器 3.同步,包括自旋 ...

随机推荐

  1. Processing 3!

    Welcome to Processing 3! Dan explains the new features and changes; the links Dan mentions are on th ...

  2. xlwings excel(四)

    前言 当年看<别怕,Excel VBA其实很简单>相见恨晚,看了第一版电子版之后,买了纸质版,然后将其送人.而后,发现出了第二版,买之收藏.之后,发现Python这一编程语言,简直是逆天, ...

  3. 嗯 想写个demo 苦于没数据

    step 1: 来点数据: 各种数据 随你便了. step 2: 来个 服务端 step 3 : 客户端 调用

  4. BZOJ 1152 歌唱王国

    题目传送门 分析: 这道题很神仙,我们给出低配版解法和高配版解法2333 低配版: 首先知道这样一个公式...(证明去高配版) 当一个字符串S其中S [ 1 , i ] = S [ n - i + 1 ...

  5. C++封装的基于WinSock2的TCP服务端、客户端

    无聊研究Winsock套接字编程,用原生的C语言接口写出来的代码看着难受,于是自己简单用C++封装一下,把思路过程理清,方便自己后续翻看和新手学习. 只写好了TCP通信服务端,有空把客户端流程也封装一 ...

  6. Windows10 企业版激活

    今天同大家分享一个Windows自带的激活方法(注:适用于win10 企业版 2019长期服务版,其他版本自行测试) 1.首先确保电脑网络通畅(不需要梯子) 2.以管理员方式运行cmd输入: slmg ...

  7. SQL 两个时间段 不能重复语句

    DECLARE @BeginDate datetime; DECLARE @EndDate datetime; set @BeginDate='2015-03-2' set @EndDate='201 ...

  8. springcloud 依赖版本问题

    SpringCloud 版本: 版本名称 版本 Finchley snapshot版 Edgware snapshot版 Dalston SR1 当前最新稳定版本 Camden SR7 稳定版本 Br ...

  9. 踩坑:windows系统下,nodejs版本管理器无法使用n来管理

    错误 :在windows系统下,需要npm 一个n来管理nodejs的版本,但是使用npm install -g n命令之后报错 原因 : n 不支持 windows系统  只支持mac系统.

  10. angular之模块开发一

    模块化开发 概述 什么是模块化开发 将软件产品看作为一系列功能模块的组合 通过特定的方式实现软件所需模块的划分.管理.加载 为什么使用模块化开发 https://github.com/seajs/se ...