1. .Net单元测试框架: moq

  2. 如果项目目的Internal方法需要再单元测试项目中引用到测试,由于默认情况下,Internal只能在同一程序集中引用,这种情况下需要在AssemblyInfo.cs中添加 “[assembly: InternalsVisibleTo(“UnitTest项目名称”)]” 使得Internal类型和方法在项目之外的单元测试项目中也可以访问到

  3. 单元测试类或方法的DeploymentItemAttribute特性:指定随着运行单元测试一起部署的目录或文件,比如
    [DeploymentItem(“sysconfig.unittest.config”)]
    [DeploymentItem(“sysconfig.testdebug.locator”)]
    [TestClass] 或者[TestMethod]
    ……

  4. [AssemlyInitialize] 定义单元测试的程序集运行时的初始方法,在[TestInitialize]之前运行, 比如: 在测试项目中建如下测试类,在里面建如下[AssemlyInitialize] 初始化方法:
    [TestClass]
    public class Startup
    {
    [AssemlyInitialize]
    public static void MyTestInit(TestContext testContext)
    {
    TestConfigure.Initialize();
    }
    }

  5. [ClassInitialize] :类似[AssemlyInitialize] 的作用,只是定义类的初始化方法

  6. [TestInitialize]在测试类中指定每次单元测试方法运行之前都运行的“初始方法”(有2个DataRow或者带回2组测试参数DynamicData的单元测试方法2次运行前也都会2次分别先运行“初始方法”)

  7. 与以上3、4、5相对应的有[TestCleanup]、[ClassCleanup]、[AssemblyCleanup],用于测试方法执行之后执行,比如释放资源等操作

  8. [Ignore]定义不执行的测试方法,比如临时未能跑通的测试方法暂时保存时很有用,而不用注释掉代码

  9. 结合多组参数数据对单元测试方法进行测试:
    [DataTestMethod]
    [DataRow(1,2,…,N)]
    …带参数的单元测试方法

  10. 预料执行会抛出指定的异常的单元测试方法,(默认参数下AllowDerivedTypes = false,抛出“预料异常类的子类”不视为“预料异常”)
    [ExpectedException(typeof(Exception类) , AllowDerivedTypes = false)]
    ……单元测试方法

  11. 也可以不通过特性,而通过Assert.ThrowsException<Exception类>(Action或Func)来预料执行会抛出指定的异常的单元测试方法

  12. 使用[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框架介绍相关推荐

  1. Python单元测试框架介绍

    背景 为啥把单元测试框架介绍放到这里讲,其实主要是想讲pytest框架的应用.这也是应网友的心声.其实pytest框架我以前是用在实际项目中的,只是一直没有将实践过程和经验教训沉淀下来.如今,我想还是 ...

  2. 使用Moq框架的各种模拟设置

    目录 介绍 返回语句以返回值 执行某些函数后执行某些任务 从模拟函数顺序返回多个值 第二次抛出异常 CallBase()调用原始实现 模拟泛型类 边界线 介绍 在本文中,我们将了解使用Moq框架的各种 ...

  3. .net测试篇之Moq框架简单使用

    Moq简介 Moq是.net平台下的一个非常流行的模拟库,只要有一个接口它就可以动态生成一个对象,底层使用的是Castle的动态代理功能. 它的流行赖于依赖注入模式的兴起,现在越来越多的分层架构使用依 ...

  4. spring框架介绍_Spring框架介绍

    spring框架介绍 这是Spring框架和Spring核心概念的简介. 在本教程中,我们将介绍Spring Framework的主要优点和功能. 在随后的教程中,我们将学习有关Spring和Spri ...

  5. 1. MyBatis框架介绍

    1. MyBatis框架介绍 1. 框架概述 程序开发中框架(framework)往往是对常见功能的封装,可以把框架理解为软件的设计规范或者标准化的组件,好比机械中的螺丝螺母等标准的机械部件 假如你要 ...

  6. struts的框架介绍

    1struts的框架介绍 struts2由struts1和webwork结合而来,更准确的的说是在struts1 的基础上按照webwork的设计理念发展起来的,实际上学过webwork的人更加容易平 ...

  7. go-micro框架介绍

    go-micro介绍及环境搭建 一.micro框架介绍 1.1.概述 Micro是一个简化分布式开发的微服务生态系统,该系统为开发分布式应用程序提供了高效,便捷的模块构建.主要目的是简化分布式系统的开 ...

  8. Django框架介绍及配置

    Django框架介绍及配置 一, WEB框架介绍 1.1Web应用程序处理流程 1.2Web框架程序的意义 用于搭建Web应用程序 免去不同Web应用相同代码部分的重复 1.3 Web应用程序的本质 ...

  9. 偷懒的网络框架libevent、libev框架介绍

    libevent.libev框架介绍 前言 概述 libevent 编译安装libevent libevent的封装层次 IO事件检测的封装与api介绍 事件管理器event_base `构建事件管理 ...

最新文章

  1. Java时间Calendar
  2. 让 Linux 防火墙新秀 nftables 为你的 VPS 保驾护航
  3. php串行化,PHP串行化与JSON
  4. php smarty框架案例,php封装的smarty类案例
  5. @select注解_Mybatis基本知识十七:Mybatis注解式开发-单表注解式开发
  6. windows 反弹shell_容器内反弹shell的51种姿势
  7. 社交媒体电影视频网HTML5模板
  8. JavaScript和C#通用gb2312和utf8编码解码函数简单实现
  9. 【Elasticsearch】Lucene 中的 Stored Fields 存储优化 自定义 存储类型 序列化 方式
  10. EJB3.0学习笔记---JBOSS 7.1.1 Final版本安装与配置
  11. GDC 2006 Microsoft Developer Day Presentations
  12. Vue.js 2.0版
  13. HDU 1007 Quoit Design(分治)
  14. 计算机组成原理 唐朔飞 思维导图
  15. mapabc地图开发之定位篇(GPS+谷歌基站定位+高德基站定位)
  16. 仿ios相机apk_iCamera仿苹果相机app下载-iCamera仿苹果相机下载app手机版 v4.0-第六手游网...
  17. bugku-writeup-MISC-宽带信息泄露
  18. 1.居民身份证号码,由17位数字本体码,和1位数字校验码组成 2.判断用户输入的身份证号码是否合法 规则为:号码为18位,不能以0开头,前17位只可以是数字,最后一位可以是数字或‘X‘
  19. 2020牛客暑期多校训练营(第九场) Groundhog and 2-Power Representation
  20. 中断的概念和机制————(清华大学慕课记录)

热门文章

  1. 跟杨春娟学Spring笔记:表达式装配
  2. 简单几步让中国菜刀绕过安全狗
  3. vue-cli 3.0之跨域请求devServer proxy代理配置
  4. j2objc_Google工具J2ObjC将Java转换为Objective-C
  5. Bootstrap Metro UI CSS
  6. 基于J2EE轻量级容器构件框架六、数据bean(DataBean)
  7. 计算机二级word突出显示,计算机二级word真题:调查报告美化排版
  8. HDU4857 逃生(拓扑排序经典好题)
  9. Excel,BI,Python数据分析我们如何三选一?
  10. WPA-PSK无线网络密码破解原理