前言

MSTest测试项目为我们实现了断言类Assert,用于报告代码行为的正确性,比如:

var result = Calculator.Add(1,2);
Assert.AreEqual(3, result);

虽然常用的断言方法已经可以工作。

但是,我们更希望使用自定义断言,这样可以让我们的测试更易读。

实现

要为MSTest编写自定义断言,我们只要为Assert类编写扩展方法。

反编译Assert类的源代码,可以看到断言失败是通过抛出AssertFailedException来指示测试用例失败:

// Microsoft.VisualStudio.TestTools.UnitTesting.Assert
using System.Globalization;internal static void HandleFail(string assertionName, string message, params object[] parameters)
{string text = string.Empty;if (!string.IsNullOrEmpty(message)){text = ((parameters != null) ? string.Format(CultureInfo.CurrentCulture, ReplaceNulls(message), parameters) : ReplaceNulls(message));}throw new AssertFailedException(string.Format(CultureInfo.CurrentCulture, FrameworkMessages.AssertionFailed, new object[2] { assertionName, text }));
}

我们可以依葫芦画瓢。

例如,实现断言IsType<T>,用于验证对象是否正是给定的类型:

internal static class AssertExtensions
{public static void IsType<T>(this Assert assert, object obj){if (obj is T){return;}throw new AssertFailedException($@"Assert.That.IsType失败。不是指定的类型{typeof(T)}");}
}

使用

Assert类提供了That属性,可以获取Assert类的实例。

因此,只需在测试用例中用Assert.That访问扩展方法即可:

[TestMethod]
public void TestMethod1()
{Assert.That.IsType<Class1>("My IO");
}

结论

Assert.That属性好像只有MSTest测试项目提供,没法为其它测试项目实现自定义断言。

如果你有实现方案,欢迎到公众号后台留言交流!

使用C#为MSTest测试项目实现自定义断言相关推荐

  1. 【微信小程序控制硬件③】 从软件到硬件搭建一个微信小程序控制esp8266的项目,自定义通讯协议,为面试职位和比赛项目加分!

    微信物联网生态主要分在微信硬件开发平台与腾讯物联开发平台,前者已经停止维护,但依然有着很大的学习价值,而后者作为主推的平台,集成很多功能,包括从微信小程序实现配网到控制: 为了兼顾更多的朋友和自己的学 ...

  2. 根据自动装配原理在Springboot项目中自定义starter,并实现热插拔技术,自定义@enable

    根据自动装配原理在Springboot项目中自定义starter,并实现热插拔技术 自定义starter 简单步骤 使用测试 优化(热插拔技术) 自定义starter 简单步骤 创建项目,并引入aut ...

  3. TPA测试项目管理系统-测试问题管理

    Test Project Administrator(简称TPA)是经纬恒润研发的一款测试项目管理工具,目前已广泛的应用于国内二十多个整车厂和零部件供应商.它可以管理测试过程中的数据和文档,包括需求. ...

  4. xUnit测试项目使用笔记

    一.新建测试项目 xUnit 二.新建一个基础的测试基类:BaseTest,测试类基类: 初始化程序默认需要验证内容或数据库.redis等内容和公用的写日志方式 /// <summary> ...

  5. 使用命令行运行 jMeter 测试项目

    jMeter 不建议使用 GUI 模式运行性能测试. GUI 模式仅适用于创建测试项目或者调试. 命令行: jmeter -n -t jerrysandbox.jmx -l 11.txt 其中 -n ...

  6. linux如何执行平台,如何在Linux平台运行HelloWorld及测试项目

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Cocos2d-x引擎自Cocos2d-1.0.1-x-0.9.2版本以来支持Linux平台. 本文介绍如何在Linux及Android模拟器中运行Hel ...

  7. 使用 Xunit.DependencyInjection 改造测试项目

    使用 Xunit.DependencyInjection 改造测试项目 Intro 这篇文章拖了很长时间没写,之前也有介绍过 Xunit.DependencyInjection 这个项目,这个项目是由 ...

  8. mock测试使用断言_使用自定义断言丰富测试代码

    mock测试使用断言 受GeeCON会议期间@tkaczanowski演讲的启发,我决定仔细研究AssertJ库的自定义断言. 在我的"骰子"游戏中,我创建了一个"机会& ...

  9. 使用自定义断言丰富测试代码

    受GeeCON会议期间@tkaczanowski演讲的启发,我决定仔细研究AssertJ库的自定义断言. 在我的"骰子"游戏中,我创建了一个"机会",它是骰子的 ...

最新文章

  1. 阿里达摩院再造AI抗疫技术:20秒判读CT影像,识别准确率达96%,河南率先启用...
  2. 画火柴人动画的手机软件_王者荣耀 玩家画的火柴人造型的英雄 图五的英雄你能猜出是谁吗...
  3. Java必备主流技术流程图
  4. 21-5-22校赛J 下围棋
  5. 数字拆分为斐波那契数列_检查数字是否为斐波那契
  6. Ubuntu 20.04 LTS 代号 “Focal Fossa“,明年 4 月正式发布
  7. 从ASP.NET的PHP执行速度比较谈起
  8. 2015年自然语言处理实证方法会议(EMNLP)简介
  9. MIPS单周期CPU设计——lw和sw指令的设计
  10. 快速部署开源的 Java 博客系统 Tale
  11. 深度学习入门学习路线及好课推荐
  12. 无法加载 MySQL ODBC 5.3 Unicode Driver ODBC 驱动程序的安装例程,因为存在错误代码126.
  13. 注塑机压铸机比例阀控制放大器
  14. 【原创】图像处理第5弹:面部表情识别--微笑
  15. 计算机到交换机端口查询,新手上路:根据ip地址查交换机端口网络知识 -电脑资料...
  16. 【数模整理3】数据分析那些事儿——回归分析
  17. vue根据url获取内容axios_使用Vue.js和Axios从第三方API获取数据 — SitePoint
  18. 【图像融合】像素点图像融合【含GUI Matlab源码 783期】
  19. 弥散峰度成像DKI简介
  20. Python灰帽子——黑客与逆向工程师的Python编程之道

热门文章

  1. ubuntu 的QT4的qmake失败的处理方法
  2. void 类型的指针
  3. 有研究irrlicht引擎的吗,交流交流
  4. ExtJs学习笔记(21)-使用XTemplate结合WCF显示数据
  5. 中兴a2018拆机图片_中兴天机拆机步骤详解【图文】
  6. Linux环境下压缩与解压命令大全
  7. SHELL 脚本小技巧
  8. JQ插件 jquery mobiscroll
  9. lz98n外接电源注意问题
  10. 跨域访问-JSONP