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<string>〉」注册到「方法册」中。
/// </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#建立自己的测试用例系统的更多相关文章
- 【Unity Shaders】使用Unity Render Textures实现画面特效——建立画面特效脚本系统
本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...
- Maven实战(Maven+Nexus建立私服【Linux系统】)
准备工作 下载及配置Maven3:http://www.cnblogs.com/leefreeman/archive/2013/03/05/2944519.html 下载Nexus:http://ne ...
- SublimeText 建立构建Node js系统
Sublime Text 3 构建系统:https://www.sublimetext.com/docs/3/build_systems.html 注意: 文档中出现的 shell_cmd 和 cmd ...
- 用Linux建立多应用系统备份服务器
用Linux建立多应用系统备份服务器 本文旨在结合自己的工作实际,利用LinuxFTP服务器建立了一个多系统备份服务器异地备份策略. 1 建立LinuxFTP服务器 使用了Red Hat Enterp ...
- 建立apk定时自动打包系统第一篇——Ant多渠道打包并指定打包目录和打包日期
团队开发时,每天都需要输出一个apk包给其它部门的同事测试验证.打包几乎是每天必须完成的功课.如果用IDE来输出apk,那速度是非常慢的,如果还需要有不同渠道的apk包,那程序猿都要疯了.当然也有用 ...
- 欢迎阅读daxnet的新博客:一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统
2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为"希赛网" ...
- 利用WCF的双工通讯实现一个简单的心跳监控系统
何为心跳监控系统? 故名思义,就是监控某个或某些个程序的运行状态,就好比医院里面的心跳监视仪一样,能够随时显示病人的心跳情况. 心跳监控的目的是什么? 与医院里面的心跳监视仪目的类似,监控程序运行状态 ...
- 一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统
2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为“希赛网”)个人空间发布过一些 ...
- 深入解析Windows操作系统笔记——CH3系统机制
3.系统机制 微软提供了一些基本组件让内核模式的组件使用: 1.陷阱分发,包括终端,延迟的过程调用(DPC),异步过程调用(APC),异常分发以及系统服务分发 2.执行体对象管理器 3.同步,包括自旋 ...
随机推荐
- SqlServer分页存储过程(多表查询,多条件排序),Repeater控件呈现数据以及分页
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出 ...
- 如何学习理解Redux Middleware
Redux中的middleware其实就像是给你提供一个在action发出到实际reducer执行之前处理一些事情的机会.可以允许我们添加自己的逻辑在这段当中.它提供的是位于 action 被发起之后 ...
- elasticsearch(lucene)索引数据过程
倒排索引存储-分段存储(lucene的功能)在lucene中:lucene index包含了若干个segment在elasticsearch中:index包含了若干主从shard,shard包干了若干 ...
- 个人任务Day3
昨日成果: 学习有关java的网络爬虫知识. 今日任务: 向数据库中完善数据,并写出选择查看团队博客的界面.
- 4、python基础语法
前言:本文主要介绍python的一些基础语法,包括标识符的定义.行和缩进.引号和注释.输入输出.变量的定义. 一.标识符 1.凡是我们自己取的名字,都是标识符. 2.在Python里,标识符由字母.下 ...
- 初入计科,首次接触C的感受
1 你对计算机科学与技术专业了解是怎样? 答:一开始我对这个专业并无了解,觉得无非是把电脑给学透.经过一周的学习后,我深刻地感觉自己对这个专业深深的误解. 通过翻阅书籍,上网浏览相关信息,我认为该专业 ...
- RabbitMq 深入了解
积少成多 ---- 仅以此致敬和我一样在慢慢前进的人儿 问题一:什么是RabbitMq 下面就是些个人的感受, rabbitmq 就是一个遵循AMQP协议(这个是啥不清楚) 的消息队列的实现,用于服 ...
- Redis入门,Jedis和常用命令
一.Redis简介 1.关于关系型数据库和nosql数据库 关系型数据库是基于关系表的数据库,最终会将数据持久化到磁盘上,而nosql数据 库是基于特殊的结构,并将数据存储到内存的数据库.从性 ...
- windows 安装mongodb2
安装文件:mongodb-win32-x86_64-2008plus-ssl-3.2.6-signed.msi 电脑配置:win7 64位 MongoDB的安装很简单,设置好安装路径后,一直Next直 ...
- Hadoop-3.1.2安装步骤
Hadoop-3.1.2 安装步骤 第一步 准备 服务器配置 1. 在VMware中安装把Centos7安装成功后,需要把界面设置为命令行启动,因为默认的启动方式是图形界面启动 systemctl ...