引言

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

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

最新文章

  1. 【Beta】第七次任务发布
  2. Comet技术
  3. java多线程系类:JUC线程池:02之线程池原理(一)
  4. Navigation Bar options for Android (based on photosomething project)
  5. 2016HUAS_ACM暑假集训4M - 基础DP
  6. Java基础(10):java基础第一部分综合测试题,成绩合法性校验与排序
  7. 如何给桌面搬家(Win XP)
  8. Ubuntu下MySQL数据库安装与配置与卸载
  9. 1.一步一步学c#(一):.NET体系结构(知识点)
  10. 10881 - Piotr&#39;s Ants
  11. 百度富文本编辑器UEditor1.3上传图片附件等
  12. 使用moment.js轻松管理日期和时间
  13. 《Java从入门到放弃》入门篇:hibernate查询——HQL
  14. js数字货币格式互转
  15. SKlearn库学习曲线
  16. 【学习笔记】浅析Promise函数
  17. [UE4]射击和直线追踪
  18. JavaScript Web 应用最佳实践分析
  19. linux网口驱动实现(待续)
  20. # 20155224 2016-2017-2《Java程序设计》课程总结

热门文章

  1. java小心机(3)| 浅析finalize()
  2. (ES6)JavaScript中面向对象类的实现
  3. ValueError: The field admin.LogEntry.user was declared with a lazy reference to &#39;system.sysuser&#39;, bu
  4. STM8 ADC1连续模式切换通道干扰问题的解决
  5. nginx之文件配置
  6. Leetcode 题目整理 climbing stairs
  7. Web 开发工具类(5) | DateUtils
  8. Python中heapq与优先队列【详细】
  9. C++ 类模板详解(一):概念和基本使用方式
  10. 9. Palindrome Number QuestionEditorial Solution