.Net单元测试知识点及moq框架介绍
.Net单元测试框架: moq
如果项目目的Internal方法需要再单元测试项目中引用到测试,由于默认情况下,Internal只能在同一程序集中引用,这种情况下需要在AssemblyInfo.cs中添加 “[assembly: InternalsVisibleTo(“UnitTest项目名称”)]” 使得Internal类型和方法在项目之外的单元测试项目中也可以访问到
单元测试类或方法的DeploymentItemAttribute特性:指定随着运行单元测试一起部署的目录或文件,比如
[DeploymentItem(“sysconfig.unittest.config”)]
[DeploymentItem(“sysconfig.testdebug.locator”)]
[TestClass] 或者[TestMethod]
……[AssemlyInitialize] 定义单元测试的程序集运行时的初始方法,在[TestInitialize]之前运行, 比如: 在测试项目中建如下测试类,在里面建如下[AssemlyInitialize] 初始化方法:
[TestClass]
public class Startup
{
[AssemlyInitialize]
public static void MyTestInit(TestContext testContext)
{
TestConfigure.Initialize();
}
}[ClassInitialize] :类似[AssemlyInitialize] 的作用,只是定义类的初始化方法
[TestInitialize]在测试类中指定每次单元测试方法运行之前都运行的“初始方法”(有2个DataRow或者带回2组测试参数DynamicData的单元测试方法2次运行前也都会2次分别先运行“初始方法”)
与以上3、4、5相对应的有[TestCleanup]、[ClassCleanup]、[AssemblyCleanup],用于测试方法执行之后执行,比如释放资源等操作
[Ignore]定义不执行的测试方法,比如临时未能跑通的测试方法暂时保存时很有用,而不用注释掉代码
结合多组参数数据对单元测试方法进行测试:
[DataTestMethod]
[DataRow(1,2,…,N)]
…带参数的单元测试方法预料执行会抛出指定的异常的单元测试方法,(默认参数下AllowDerivedTypes = false,抛出“预料异常类的子类”不视为“预料异常”)
[ExpectedException(typeof(Exception类) , AllowDerivedTypes = false)]
……单元测试方法也可以不通过特性,而通过Assert.ThrowsException<Exception类>(Action或Func)来预料执行会抛出指定的异常的单元测试方法
使用[DynamicData] 结合返回值的静态方法或属性,进行多种组合的参数化测试
比如:
- 例1:
[DynamicData(nameof(GetTestData), DynamicDataSourceType.Method)] //arrange
[TestMethod()]
public void TestMathOps(decimal a, decimal b, Func<decimal, decimal, decimal> calculatorOperation, decimal expectedValue)
{
//act
var actual = calculatorOperation(a, b);
//assert
Assert.AreEqual(expectedValue, actual);
}
And here’s the GetTestData test data generator method:
private static IEnumerable<object[]> GetTestData()
{
return new List<object[]>()
{
new object[]{ 1.2m, 2.3m, (Func<decimal, decimal, decimal>)Calculator.Add, 3.5m },
new object[]{ 1.5m, 0.5m, (Func<decimal, decimal, decimal>)Calculator.Subtract, 1.0m },
new object[]{ 1.5m, 2.0m, (Func<decimal, decimal, decimal>)Calculator.Multiply, 3.0m }
};
}
详见: 《C# – Use DynamicData attribute to pass functions and objects into parameterized tests》
https://makolyte.com/csharp-use-dynamicdata-attribute-to-pass-functions-and-objects-into-parameterized-tests/ - 例2:
[DataTestMethod]
[DynamicData(“TestPropVal”,DynamicDataSourceType.Property)]
public void TestCall(Class1, int expVal)
{
…
}
返回测试参数值的静态属性:
private static List<object[]> TestPropVal
{
get
{
return new List<object[]>(){
new object[]{new Class1(),0},
new object[]{new Class1(){…},2},
…
}
}
}
.Net单元测试知识点及moq框架介绍相关推荐
- Python单元测试框架介绍
背景 为啥把单元测试框架介绍放到这里讲,其实主要是想讲pytest框架的应用.这也是应网友的心声.其实pytest框架我以前是用在实际项目中的,只是一直没有将实践过程和经验教训沉淀下来.如今,我想还是 ...
- 使用Moq框架的各种模拟设置
目录 介绍 返回语句以返回值 执行某些函数后执行某些任务 从模拟函数顺序返回多个值 第二次抛出异常 CallBase()调用原始实现 模拟泛型类 边界线 介绍 在本文中,我们将了解使用Moq框架的各种 ...
- .net测试篇之Moq框架简单使用
Moq简介 Moq是.net平台下的一个非常流行的模拟库,只要有一个接口它就可以动态生成一个对象,底层使用的是Castle的动态代理功能. 它的流行赖于依赖注入模式的兴起,现在越来越多的分层架构使用依 ...
- spring框架介绍_Spring框架介绍
spring框架介绍 这是Spring框架和Spring核心概念的简介. 在本教程中,我们将介绍Spring Framework的主要优点和功能. 在随后的教程中,我们将学习有关Spring和Spri ...
- 1. MyBatis框架介绍
1. MyBatis框架介绍 1. 框架概述 程序开发中框架(framework)往往是对常见功能的封装,可以把框架理解为软件的设计规范或者标准化的组件,好比机械中的螺丝螺母等标准的机械部件 假如你要 ...
- struts的框架介绍
1struts的框架介绍 struts2由struts1和webwork结合而来,更准确的的说是在struts1 的基础上按照webwork的设计理念发展起来的,实际上学过webwork的人更加容易平 ...
- go-micro框架介绍
go-micro介绍及环境搭建 一.micro框架介绍 1.1.概述 Micro是一个简化分布式开发的微服务生态系统,该系统为开发分布式应用程序提供了高效,便捷的模块构建.主要目的是简化分布式系统的开 ...
- Django框架介绍及配置
Django框架介绍及配置 一, WEB框架介绍 1.1Web应用程序处理流程 1.2Web框架程序的意义 用于搭建Web应用程序 免去不同Web应用相同代码部分的重复 1.3 Web应用程序的本质 ...
- 偷懒的网络框架libevent、libev框架介绍
libevent.libev框架介绍 前言 概述 libevent 编译安装libevent libevent的封装层次 IO事件检测的封装与api介绍 事件管理器event_base `构建事件管理 ...
最新文章
- Java时间Calendar
- 让 Linux 防火墙新秀 nftables 为你的 VPS 保驾护航
- php串行化,PHP串行化与JSON
- php smarty框架案例,php封装的smarty类案例
- @select注解_Mybatis基本知识十七:Mybatis注解式开发-单表注解式开发
- windows 反弹shell_容器内反弹shell的51种姿势
- 社交媒体电影视频网HTML5模板
- JavaScript和C#通用gb2312和utf8编码解码函数简单实现
- 【Elasticsearch】Lucene 中的 Stored Fields 存储优化 自定义 存储类型 序列化 方式
- EJB3.0学习笔记---JBOSS 7.1.1 Final版本安装与配置
- GDC 2006 Microsoft Developer Day Presentations
- Vue.js 2.0版
- HDU 1007 Quoit Design(分治)
- 计算机组成原理 唐朔飞 思维导图
- mapabc地图开发之定位篇(GPS+谷歌基站定位+高德基站定位)
- 仿ios相机apk_iCamera仿苹果相机app下载-iCamera仿苹果相机下载app手机版 v4.0-第六手游网...
- bugku-writeup-MISC-宽带信息泄露
- 1.居民身份证号码,由17位数字本体码,和1位数字校验码组成 2.判断用户输入的身份证号码是否合法 规则为:号码为18位,不能以0开头,前17位只可以是数字,最后一位可以是数字或‘X‘
- 2020牛客暑期多校训练营(第九场)	Groundhog and 2-Power Representation
- 中断的概念和机制————(清华大学慕课记录)
热门文章
- 跟杨春娟学Spring笔记:表达式装配
- 简单几步让中国菜刀绕过安全狗
- vue-cli 3.0之跨域请求devServer proxy代理配置
- j2objc_Google工具J2ObjC将Java转换为Objective-C
- Bootstrap Metro UI CSS
- 基于J2EE轻量级容器构件框架六、数据bean(DataBean)
- 计算机二级word突出显示,计算机二级word真题:调查报告美化排版
- HDU4857 逃生(拓扑排序经典好题)
- Excel,BI,Python数据分析我们如何三选一?
- WPA-PSK无线网络密码破解原理