详谈单元测试-xUnit

article/2025/10/20 12:17:32

简介

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 查看学习
在这里插入图片描述


http://chatgpt.dhexx.cn/article/RyHtXbl9.shtml

相关文章

01 如何利用xUnit框架对测试用例进行维护-xUnit简介及基本使用方法(基于Junit4)

1、xUnit是什么 先看Wikipedia上的解释 xUnit是一系列测试框架的统称,最开始来源于一个叫做Smalltalk的SUnit框架,现在各种面向对象的语言,如Java、Python的鼻祖就是Smalltalk,后来这些语言都借助了Sunit框架的理念,有…

【IoT】物联网NB-IoT之移动oneNET平台硬件接入

主要实现开发者实际的终端设备在 OneNET 平台上的创建、连接和数据交互。在完成用户注册和产品创建后,即可根据相关所创建产品的协议类型选择相应的硬件接入的开发。 接入流程可参见下图: 1、LWM2M 协议 - NB-IoT 测试接入流程分为平台域和设备域&…

【安装工具】【ARM-DS-5】成功破解ARM DS-5 v5.26.0 + 配置高通MDM9026芯片的demo==》成功编译得到demo.bin文件

Note:Win7 64环境 安装破解ARM DS-5 v5.26.0 http://blog.csdn.net/qq_27295631/article/details/68582582 验证破解成功 安装MinGW http://blog.csdn.net/qq_27295631/article/details/68582582 设置系统属性-环境变量(bin/lib/inc) ARMBIN C:\Program Files…

把乌托邦变成细密画:华为如何思考家居IoT?

奥尔罕帕穆克凭借他的名作《我的名字叫红》一举跃入20世纪文学史,而这部广为人知的作品也让我们知道了一种绘画史上非常奇特的艺术形式:细密画。 这种流传自希腊罗马,盛行于波斯帝国的艺术样式,特点是要在书的扉页、边框&#xff…

MDM9607平台 Secure Boot调试记录

本博客只涉及技术问题,尊重原创,不涉及商用问题。 目录 一 概述... 4 二 原理及流程... 4 2.1 安全启动原理... 4 2.2 安全启动结构图:... 5 2.3 安全启动流程图... 5 三 证书简介... 6 四 签名镜像格式... 7 五 熔丝熔断... 7 5.1 熔断使能... 7 5.2 熔断过程..…

MDM9205简介

大家好,今天小白给大家介绍下高通新推出的下一代物联网专用调制解调器Qualcomm 9205,欢迎一起学习交流。 去年12月17日,高通宣布推出下一代物联网(IoT)专用调制解调器Qualcomm 9205。全新Qualcomm 9205 LTE调制解调器…

基于机智云gokit4.0(G)和MDM9206的 小型智能气象站

项目介绍 小型气象站广泛应用于气象、农业、环境检测和治理等领域。小型气象站对空气温湿度、光照、风速、风向、雨量、土壤湿度、蒸发量、大气压力等环境气象要素进行全天候现场检测。通过更换不同的传感器,该装置也可用于楼宇环境监控、安防、智慧农业等领域。 由…

MWC2018 机智云发布gokit4.0G全栈IoT开发套件,支持高通MDM9206

MWC2018 机智云发布gokit4.0G全栈IoT开发套件,支持高通MDM9206 NB-IoT/eMTC 继2月14日Qualcomm高通宣布,推出面向Qualcomm MDM9206LTE IoT全球多模调制解调器的全新LTEIoT软件开发包(SDK),并已预集成机智云物联网云平…

【沙龙】基于MDM9206芯片的gokit4(G)的应用实操

导读 紧跟前沿通信技术、Get最新开发技能,高通Qualcomm&机智云&移远通信高级工程师手把手教开发:通过GoKit4(G)MDM9206快速接入机智云,4小时掌握高通MDM9206 C-IoT SDK实现不同IoT应用场景的方法,实现NB-IoT产品原型设计…

在线公开课】基于MDM9206的GoKit4(G)在线公开课

【在线公开课】基于MDM9206的GoKit4(G)在线公开课 基于Qualcomm C-IoT SDK的物联网开发以及GoKit4应用开发指导 MDM9206 LTE IoT调制解调器是一款专为支持全球多模功能而打造的解决方案,它可支持eMTC(Cat M1)、NB-IoT(Cat NB-1&…

MDM9206简介

MDM9206简介 大家好,今天小白给大家介绍一下当前很火热的一款多模多频的高通的NB-IOT芯片,欢迎一起讨论学习。 1. MDM9206芯片的发展背景 接下来我们看看该款具有代表性的多模多频NB-IOT芯片是基于什么样的大背景下产生的? 从2G、3G如今的…

VMware虚拟机centOS7的终端命令:权限不够

我的VMware虚拟机centOS7在终端命令的时候老是跟我说权限不够: 然后我就去网上查查查!有一个大佬的博客非常完美的解决了我的问题! (5条消息) VM虚拟机CentOS7提升用户权限_JzjSunshine的博客-CSDN博客 现在: 但是我高兴了太早我执…

centos中常用命令

centos中常用命令 一:使用 CentOS 常用命令查看 cpu 如果觉得需要看的更加舒服 grep “model name” /proc/cpuinfo | cut -f2 -d: 二.使用 CentOS 常用命令查看 cpu 是 32 位还是 64 位 查看 CPU 位数(32 or 64) 三:使用 CentOS 常用命令查看当前 linux 的版本 more /etc/r…

CentOS 7关闭防火墙命令

1、命令行界面输入命令“systemctl status firewalld.service”并按下回车键。 2、然后在下方可以查看得到“active(running)”,此时说明防火墙已经被打开了。 3、在命令行中输入systemctl stop firewalld.service命令,进行关闭…

centos命令源码获取

源码链接 https://vault.centos.org/7.9.2009/os/Source/SPackages/ 查看本地命令版本 which ls rpm -qf /usr/bin/ls下载指定命令的rpm包 wget https://vault.centos.org/7.9.2009/os/Source/SPackages/coreutils-8.22-24.el7.src.rpm提取源码 rpm2cpio coreutils-8.22-24.…

centos下所有命令都不能用

问题描述: 解决办法: --- export PATH"/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:/bin:/sbin" 总的来说,不说运行在linux上的一些应用,或者你之前部署过的产品,就是很多linux的基本命令&#xff0…

centos linux升级命令,在CentOS系统下包更新的命令

在CentOS系统下包更新的命令 更新和升级yum update 全部更新 yum update package1 更新指定程序包package1 yum check-update 检查可更新的程序 yum upgrade package1 升级指定程序包package1 yum groupupdate group1 升级程序组group1 更多命令 一、安装yum install 全部安装 …

centos常用命令大全

文章目录 命令帮助查询操作压缩、解压网络相关文件操作命令文件与目录操作查看文件内容文本内容处理yum安装器系统相关简单命令修改密码策略 命令帮助 【要执行的命令】 --help 查询操作 全局查找 find / -name 【查询的内容】 压缩、解压 解压tar.gz结尾的压缩文件 tar -…

盘点大数据开发常用的四种编程语言

1.Python语言 如果你的数据科学家不使用R,他们可能就会彻底了解Python。如果你有一个需要NLP处理的项目,就会面临数量多得让人眼花缭乱的选择,包括经典的NTLK、使用GenSim的主题建模,或者超快、准确的spaCy。还有Juypter/iPython…