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中以避免重名:

这里填入要显示的名称、期望值、方法体。

  1. 方法体的返回参数必须为 string
  2. 两个用例名称不能相同否则会覆盖。
/// <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#建立测试用例系统的示例代码的详细内容,更多关于C#建立测试用例系统的资料请关注我们其它相关文章!

(0)

相关推荐

  • 关于Unity C# Mathf.Abs()取绝对值性能测试详解

    前言 之前有人提到过取绝对值时 直接写三目运算符比用Mathf.Abs()效率高 没觉得能高太多 今天测了一下 真是不测不知道 一测吓一跳 直接写三目运算符比Mathf.Abs()效率高2-3倍 这性能差距有点不太合理啊! 看下源码发现 很多Mathf的方法就是多封装了一层Math里的方法 把double型转成float型了 即便很简单得方法也没有重新实现 官方有点偷懒了 所以性能差距才会这么大 以后要求性能高的地方要注意 老老实实写一遍 能提升不少性能 测试代码: using UnityEng

  • c#测试本机sql运算速度的代码示例分享

    复制代码 代码如下: using System;using System.Collections.Generic;using System.Text;using System.Data.SqlClient; namespace ConsoleApplication2{    class Program    {        static void Main(string[] args)        {            SqlConnection conn = new SqlConnec

  • 详解C# WebApi 接口测试工具:WebApiTestClient

    前言:这两天在整WebApi的服务,由于调用方是Android客户端,Android开发人员也不懂C#语法,API里面的接口也不能直接给他们看,没办法,只有整个详细一点的文档呗.由于接口个数有点多,每个接口都要详细说明接口作用.参数类型.返回值类型等等,写着写着把博主惹毛了,难道这种文档非要自己写不成?难道网上没有这种文档的展示工具吗?带着这两个问题,在网络世界里寻找,网络世界很奇妙,只要你用心,总能找到或多或少的帮助!这不就被博主找到了这个好用的组件:WebApiTestClient.它对于接

  • C#控制台下测试多线程的方法

    本文实例讲述了C#控制台下多线程实现方法.分享给大家供大家参考.具体如下: class Program { static void Main(string[] args) { ThreadStart num = new ThreadStart(PrintNum); Thread ConstrolNum = new Thread(num); ThreadStart str = new ThreadStart(PrintStr); Thread ConstrolStr = new Thread(st

  • c#测试反射性能示例

    Activator.CreateInstance和AssemblyCreateInstance性能测试 复制代码 代码如下: using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Security.Cryptography;using System.Text;using HelloWorld.ServiceReference1;using Syst

  • C#代码性能测试类(简单实用)

    介绍: 可以很方便的在代码里循环执行 需要测试的函数  自动统计出执行时间,支持多线程. 使用方法: PerformanceTest p = new PerformanceTest(); p.SetCount(10);//循环次数(默认:1) p.SetIsMultithread(true);//是否启动多线程测试 (默认:false) p.Execute( i => { //需要测试的代码 Response.Write(i+"<br>"); System.Threa

  • C#建立测试用例系统的示例代码

    引言 很多时候,需要对类中的方法进行一些测试,来判断是否能按要求输出预期的结果. C#提供了快速创建单元测试的方法,但单元测试不仅速度慢不方便,大量的单元测试还会拖慢项目的启动速度. 所以决定自己搞个方便的测试用例. 控制台调用 只需要简简单单的一句话 测试用例.注册并Print(EnumEx.Name); 结果画面 测试用例的实现 /// <summary> /// 提供测试用例的注册和运行功能,用来比对结果和预期值是否相同,向控制台输出结果. /// </summary> pu

  • Django框架实现在线考试系统的示例代码

    1.Django的简介 Django是一个基于MVC构造的框架.但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model).模板(Template)和视图(Views),称为 MTV模式.它们各自的职责如下: 层次 职责 模型(Model),即数据存取层 模型(Model),即数据存取层 模板(Template),即表现层 处理与表现相关的决定: 如何在页面或其他类型文档中进行显示. 视图(View),即业务逻辑层 存取模型及调取恰当模板的相

  • 基于Qt实现驾校科目考试系统的示例代码

    目录 1.设置登录界面 2.登录功能实现 2.1验证邮箱地址 2.2账号密码登录 2.3密码隐藏 3.考试界面开发 3.1考试用时 3.2题目布局 3.3按钮布局 3.4提交分数 3.5窗口交互 4.发布项目 4.1更改编译路径 4.2设置图标 4.3通过dos进行项目打包 1.设置登录界面 LoginDialog::LoginDialog(QWidget *parent) : QDialog(parent), ui(new Ui::LoginDialog) { ui->setupUi(this

  • 2分钟实现一个Vue实时直播系统的示例代码

    前言 我们在不敲代码的时候可能会去看游戏直播,那么是前台怎么实现的呢?下面我们来讲一下. 第一步,购买云直播服务 首先,你必须去阿里云或者腾讯云注册一个直播服务.也花不了几个钱,练手的话,几十块钱就够了. 这里我拿阿里云举例,购买完了,配置好推流域名跟播流域名,下面我们将进行地址生成.记住下面生成的地址,下面会用到. 第二步,下载本地推流工具 https://obsproject.com/ 第三步,设置OBS 在第一步中图片底部有推流地址,需要注意,分为两部分填入下方图所示. 在AppName字

  • C/C++实现个人收支系统的示例代码

    昨天朋友委托我做一个基于C++的课程小设计,题目如下: 设计一个简单的个人收支管理系统,至少包括如下功能: 1.逐笔输入个人收入或支出的明细,写入到文件保存,可不断进行输入和追加. 输入的明细数据包括:收支明细类别编码.发生日期.金额.备注. 1)为了简化用户的输入,类别编码由字母和数字构成:"a"表示收入."b"表示支 出,数字是大类下的编号.类别编码及类别名称的对应由自己定义.组织在程序中 并输出展示.比如 a1 表示收入类的生活费,b1 表示支出类的学习,编号

  • 使用SSM+Layui+Bootstrap实现汽车维保系统的示例代码

    本项目主要实现对汽车维修厂的信息化管理功能,主要包含三个角色:管理员,维修师傅,客户.实现的主要功能包含用户管理.配置管理.汽车管理.故障管理.供应商管理.配件管理.维修订单管理.统计信息.公告管理.个人信息管理.主要业务流程:用户在系统内发起汽车维修申请定单,管理员根据情况将定单分配给维修师傅,维修师傅接受任务后开始维修,并根据情况申请配件,处理完成后由管理员生成最终支付订单结算费用,客户进入系统进行费用支付,并可以查看自己相应的维修记录和费用信息等等. 技术架构: 后台开发:SSM框架 前端

  • C#窗体通讯录系统的示例代码

    目录 1.首先创建DBhelp类用来连接数据库 2.创建主页面: 3.添加联系人页面 4.修改页面 5.查询页面 本文主要介绍了C#窗体通讯录系统的示例代码,分享给大家,具体如下: 1.首先创建DBhelp类用来连接数据库 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; using System.Data

  • PHP实现抽奖系统的示例代码

    目录 一.随机抽奖 二.概率抽奖 三.内定抽奖 一.随机抽奖 随机抽奖当然是最公平的抽奖,就是当用户抽奖时随机返回抽奖结果 这种结果完全随机,不受人为控制,中奖全凭借运气 先定义奖池拥有的奖品,用户进来抽奖后,随机返回奖池中的奖品 <?php $prize = ['60寸大彩电', 'iphone13', '戴森吸尘器', '索尼微单', 'VR眼镜', '谢谢参与']; // 当有用户进来抽奖,进行随机抽奖 shuffle($prize); // 抽奖结果 print_r($prize[0])

  • Java实现文件检索系统的示例代码

    示例代码 package Demo; import java.io.File; import java.io.FilenameFilter; import java.util.Scanner; import java.lang.Exception; import java.io.IOException; public class Demo8_1 { public static void main(String[] args) { while(true) { System.out.println(

  • 基于Java实现中文分词系统的示例代码

    目录 1.问题描述 2.相关工作 3.系统框架和算法设计 3.1系统整体框架 1.问题描述 中文分词 (Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词.分词就是将连续的字序列按照一定的规范重新组合成词序列的过程.我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字.句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符,虽然英文也同样存在短语的划分问题,不过在词这一层上,中文比之英文要复杂的多.困难的多. 而对于中文

随机推荐