简介

xUnit.net 是针对 .NET 的免费,开源单元测试框架,可并行测试、数据驱动测试。测试项目需引用被测试项目,从而对其进行测试,测试项目同时需要引用 xUnit。测试编写完成后,用 Test Runner 来测试项目,Test Runner 可以读取测试代码,并且知道所会使用的测试框架,然后执行,并显示结果。如下图:项目、测试项目、xUnit、Test Runner 几者关系

支持平台

xUnit.net 目前支持 .Net Framework、.Net Core、.Net Standard、UWP、Xamarin ,可以在这些平台使用 xUnit 进行测试。

Test Runner

Test Runner 有 visual studio 本身的测试资管理器、resharper、dotnet cli 这些工具

  • vs 测试资管理器,右键测试或者 ctrl+ r + t
  • resharper,这个比较占内存,是 JetBrains 旗下的 IDE
  • dotnet cli,使用 cmd 或者 powershell 执行 dotnet test 命令

测试类型

测试类型可分为,单元测试、集成测试、皮下测试、UI测试,对于不同的测试其深度即广度也相对不一样。实际上常用的是单元测试和集成测试,xUnit.net 就属于单元测试。

  • 单元测试:可以测试某个类或方法,具有较高的深度,对应用的功能覆盖面很小
  • 集成测试:有更好的广度,可以测试web资源,数据库资源等
  • 皮下测试:在 web 中针对 controller 下的节点测试
  • UI 测试:是对应用的界面功能测试

AAA

AAA 指得是单元测试的三个阶段 ,分别是 Arrange、Act、Assert

  • Arrange: 在这里做一些先决的设定。例如创建对象实例,数据,输入等
  • Act: 在这里执行生产代码并返回结果。例如调用方法或者设置属性
  • Assert:在这里检查结果,会产生测试通过或者失败两种结果

Coding 教程

接下来,通过一个案例来入门今天的主题 xUnit 单元测试,这里我们使用简单计数器的 demo 来进行讲解

创建项目

首先,使用 visual studio 创建一个类库 CalculatorPro,解决方案名称为 XUnitDemo


接着创建一个 Calculator 类型,其内有个 方法 Add 用来计算两个数值进行相加,并返回计算结果

public class Calculator
{public int Add(int x, int y){return x + y;}
}

创建测试项目

在类库项目创建完成后,接着创建一个单元测试的项目 CalculatorProTest ,命名通常使用 项目+Test 的约定方式命名测试项目


创建完成测试项目 CalculatorProTest 后,安装 xunit、xunit.runner.visualstudio 两个 package。xunit 是编写单元测试所依赖的,xunit.runner.visualstudio 是在 visual studio 可以运行单元测试的 runner

在依赖的 package 安装完成后,就可以写单元测试了,接着创建 CalculatorTests 类,其内 ShouldAddEquals5 方法用来测试 Calculator 中的 Add 方法。

Fact 说明这个方法是个单元测试方法,sut 是个通用命名规范,Assert 用来对比结果。代码中的三步也就是单元测试所谓的 3A

public class CalculatorTests
{[Fact]public void ShouldAddEquals5() //注意命名规范{//Arrangevar sut = new Calculator(); //sut-system under test,通用命名//Actvar result = sut.Add(3, 2);//AssertAssert.Equal(5, result);}
}

运行单元测试

在项目与测试项目创建完成后,就可以运行单元测试了。在 CalculatorTests 类中 ShouldAddEquals5 方法上,右键点击运行单元测试或者使用快捷键 ctrl + r + t ,就可以看到测试资源管理器,及单元测试运行结果。

下图可以看到 3 + 2 = 5 ,在 Assert.Equal(5, result) 就说明测试是通过的(5 是期望结果,result 是单元测试方法执行结果),在资源管理器可以看到,单元测试是通过的

可以模拟单元测试 fail 情况,将 Assert.Equal(5, result) 改为 Assert.Equal(6, result) ,即期望的结果 5 改为期望结果为 6 ,3+2 必然不 = 6,然后启动单元测试 ,可以看到单元测试是不通过的

分组依据,在测试资源管理器中,可以根项目、类、命名空间等,进行单元测试资源进行各类视图的查看。如下图

扩展:还可以通过 dotnet cli 在测试项目目录,执行单元测试命令 dotnet test ,当然还可以有许多参数,有兴趣的小伙伴可使用 help 查看学习

详谈单元测试-xUnit相关推荐

  1. 单元测试-xUnit

    单元测试-xUnit Assert常用方法 名称 描述 Eqalexpected.result) 断言结果与期望值相等.该方法的重载版本用于比较不同的类型和集合.该方法的另一种版本接受一个额外参数 该 ...

  2. C#/.net 单元测试xUnit、Mock、Moq

    C#/.net 单元测试xUnit.Mock.Moq 在做单元测试的时候,有时需要引用很多的外部对象,例如网络通信.记录日志等.单元测试无法控制这些外部的依赖对象,所以需要使用Stub和Mock来模拟 ...

  3. .net、C#单元测试xUnit

    xUnit单元测试 测试的分类 单元测试:对某个类或者某个方法进行测试 集成测试:可使用Web资源.数据库数据进行测试 皮下测试:在Web中对controller下的节点测试 UI测试:对界面的功能进 ...

  4. 单元测试xUnit学习

    为什么要做自动化测试 可以频繁的进行测试 可以在任何时候进行测试,也可以按计划定时测试 比人工测试快 快速发现错误 可靠 测试代码与生产代码紧密结合 代码规范 自动化测试的分类 单元测试:可以测试某个 ...

  5. 单元测试-xUnit总结

    xUnit总结 什么是xUnit xUnit.net是针对.NET Framework的免费,开源,以社区为中心的单元测试工具. 自动化测试的优点 可以频繁的进行测试 可以在任何时间进行测试,也可以按 ...

  6. 单元测试中Assert详解-xUnit

    前一篇:详谈单元测试-xUnit 简介 Assert 是基于代码的返回值.对象的最终状态.事件是否发生等情况来评估测试的结果.Assert 的结果可能是 Pass 或者 Fail.如果所有的 Asse ...

  7. 单张地图游戏服务器承载_角度单张地图的简单指南

    单张地图游戏服务器承载 Leaflet is one of the main Javascript-based mapping frameworks. It is widely used across ...

  8. Xunit.net 单元测试学习——按顺序测试

    最近一直在提高编码的质量,为了保证质量,必须有一套趁手的兵器,Xunit.Net 就是如此霸气的利器. 怎么编写单元测试 怎么会有如此低级的疑问呢?因为从接触单元测试,到使用上,真的不是一个简单的心路 ...

  9. 使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Test Framework 的源代码...

    PS:微软专家写的一往篇VSTS2005测试功能说明,非常详细.适合初学者查看. 适用于: Microsoft Visual Studio 2005 Team System Beta 2 Team A ...

最新文章

  1. JavaScript学习(八)
  2. 51CTO学院三周年,一起成长与奋斗的日子
  3. 第三十二讲 ASP.NET网络打印
  4. 微信公众平台开发——问题篇
  5. oracle 11g b表空间什么情况下自动增加,Oracle 11g表空间——创建和扩展(永久)表空间...
  6. mysql optimizer mrr_MySQL优化器功能开关optimizer_switch
  7. xss challenge 解题思路(8-18)
  8. ACCESS中通过邮件收集数据
  9. RabbitMQ之路由选择
  10. java怎么模拟rfid_如何使用RFID阅读器获取RFID标签上印刷的序列号?
  11. 《Fortran95程序设计》(彭国伦)
  12. 微信小程序中自定义模板
  13. 位移密码算法挑战 个人答案
  14. 【Java】ResourceBundle 使用
  15. SecureCRT通过vim打开文件时显示行号
  16. 求急!!谁会写接口测试,拜托了各位大佬,跪求!!我感激不尽,好好报答他
  17. Python期末大作业 —— 射靶
  18. 金融的逻辑1--读书笔记
  19. 画图别存为png 透明_怎么样是使(PNG格式)图片背景透明
  20. 会计分录、科目、账户

热门文章

  1. 微信小程序实现腾讯云接口 图象识别
  2. 查询mysql的服务名_数据库名实例名服务名
  3. 一份清晰又全面的排序算法攻略
  4. ceil 函数和 Floor 函数(C语言)
  5. C语言中变量定义的位置
  6. 视频教程-基于NDK、C++、FFmpeg的android视频播放器开发实战-Android
  7. [HTML]空格实体/转义字符
  8. 互联网新闻报道中的突发事件识别研究
  9. 数据库服务器物理内存是8g,数据库服务器 8g内存
  10. 新转的----职场规划