使用C#为MSTest测试项目实现自定义断言
前言
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测试项目实现自定义断言相关推荐
- 【微信小程序控制硬件③】 从软件到硬件搭建一个微信小程序控制esp8266的项目,自定义通讯协议,为面试职位和比赛项目加分!
微信物联网生态主要分在微信硬件开发平台与腾讯物联开发平台,前者已经停止维护,但依然有着很大的学习价值,而后者作为主推的平台,集成很多功能,包括从微信小程序实现配网到控制: 为了兼顾更多的朋友和自己的学 ...
- 根据自动装配原理在Springboot项目中自定义starter,并实现热插拔技术,自定义@enable
根据自动装配原理在Springboot项目中自定义starter,并实现热插拔技术 自定义starter 简单步骤 使用测试 优化(热插拔技术) 自定义starter 简单步骤 创建项目,并引入aut ...
- TPA测试项目管理系统-测试问题管理
Test Project Administrator(简称TPA)是经纬恒润研发的一款测试项目管理工具,目前已广泛的应用于国内二十多个整车厂和零部件供应商.它可以管理测试过程中的数据和文档,包括需求. ...
- xUnit测试项目使用笔记
一.新建测试项目 xUnit 二.新建一个基础的测试基类:BaseTest,测试类基类: 初始化程序默认需要验证内容或数据库.redis等内容和公用的写日志方式 /// <summary> ...
- 使用命令行运行 jMeter 测试项目
jMeter 不建议使用 GUI 模式运行性能测试. GUI 模式仅适用于创建测试项目或者调试. 命令行: jmeter -n -t jerrysandbox.jmx -l 11.txt 其中 -n ...
- linux如何执行平台,如何在Linux平台运行HelloWorld及测试项目
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Cocos2d-x引擎自Cocos2d-1.0.1-x-0.9.2版本以来支持Linux平台. 本文介绍如何在Linux及Android模拟器中运行Hel ...
- 使用 Xunit.DependencyInjection 改造测试项目
使用 Xunit.DependencyInjection 改造测试项目 Intro 这篇文章拖了很长时间没写,之前也有介绍过 Xunit.DependencyInjection 这个项目,这个项目是由 ...
- mock测试使用断言_使用自定义断言丰富测试代码
mock测试使用断言 受GeeCON会议期间@tkaczanowski演讲的启发,我决定仔细研究AssertJ库的自定义断言. 在我的"骰子"游戏中,我创建了一个"机会& ...
- 使用自定义断言丰富测试代码
受GeeCON会议期间@tkaczanowski演讲的启发,我决定仔细研究AssertJ库的自定义断言. 在我的"骰子"游戏中,我创建了一个"机会",它是骰子的 ...
最新文章
- 阿里达摩院再造AI抗疫技术:20秒判读CT影像,识别准确率达96%,河南率先启用...
- 画火柴人动画的手机软件_王者荣耀 玩家画的火柴人造型的英雄 图五的英雄你能猜出是谁吗...
- Java必备主流技术流程图
- 21-5-22校赛J 下围棋
- 数字拆分为斐波那契数列_检查数字是否为斐波那契
- Ubuntu 20.04 LTS 代号 “Focal Fossa“,明年 4 月正式发布
- 从ASP.NET的PHP执行速度比较谈起
- 2015年自然语言处理实证方法会议(EMNLP)简介
- MIPS单周期CPU设计——lw和sw指令的设计
- 快速部署开源的 Java 博客系统 Tale
- 深度学习入门学习路线及好课推荐
- 无法加载 MySQL ODBC 5.3 Unicode Driver ODBC 驱动程序的安装例程,因为存在错误代码126.
- 注塑机压铸机比例阀控制放大器
- 【原创】图像处理第5弹:面部表情识别--微笑
- 计算机到交换机端口查询,新手上路:根据ip地址查交换机端口网络知识 -电脑资料...
- 【数模整理3】数据分析那些事儿——回归分析
- vue根据url获取内容axios_使用Vue.js和Axios从第三方API获取数据 — SitePoint
- 【图像融合】像素点图像融合【含GUI Matlab源码 783期】
- 弥散峰度成像DKI简介
- Python灰帽子——黑客与逆向工程师的Python编程之道