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.同步,包括自旋 ...
随机推荐
- 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发
<ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...
- Docker windows 容器启动失败 network not found
前几天由于重启了服务器,docker配置的网络出了些问题导致在docker容器中安装的mysql识别用户权限时发生错误.(从宿主机A以user身份 登入到容器B中安装的Mysql时,用户竟然不是use ...
- HCNA网络技术学习指南
网络通信基础 网络与通信 OSI模型和TCP/IP模型 网络类型 传输介质及通信方式 2 VRP基础 VRP简介 VRP命令行 登录设备 基本配置 配置文件管理 通过Telnet登录设备 文件管理 基 ...
- HGE引擎改进
基于HGEDX9版本修改. hge库: 1.全UNICODE化 2.增加时间模块:Timer_StartTick(),Timer_NowTick()等六个函数 3.增加服从正态分布的随机数生成函数:R ...
- SpringBoot中对SpringMVC的自动配置
https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/htmlsingle/#boot-features-developin ...
- Docker在树莓派的安装与使用(Ubuntu Arm Server v19.10)
最近由于冠状病毒疫情的原因,只能够和小朋友家里蹲.这几天把尘封已久的那个树莓派拿出来继续捣鼓.希望能够做一个异构的分布式系统框架,于是想把Docker也安装到树莓派上,以便后期做进一步的开发和实验. ...
- Python3基础之初识Python
Python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序, 作为ABC语 ...
- 设计模式-03工厂方法模式(Factory Method Pattern)
插曲.简单工厂模式(Simple Factory Pattern) 介绍工厂方法模式之前,先来做一个铺垫,了解一下简单工厂模式,它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背 ...
- Django设置session过期时间
settings.py #session 设置 SESSION_COOKIE_AGE = 60 * 10 # 设置过期时间10分钟,默认为两周 SESSION_SAVE_EVERY_REQUEST = ...
- 每日一技|巧用 Telnet 调试 Dubbo 服务
个人博客地址 studyidea.cn,点击查看更多原创文章 0x00. 前言 想象这样一个场景,线上某个服务突发异常,导致上游服务调用异常,数据处于中间状态.服务恢复之后,我们需要修复这笔数据至正常 ...