首页 > 编程语言 >【C#】单元测试入门(XUnit 测试框架)

【C#】单元测试入门(XUnit 测试框架)

时间:2024-10-17 14:22:37浏览次数:4  
标签:C# sum 单元测试 Add 测试 XUnit public Arithmetic

 本文示例环境

  • Visual Studio 2019
  • XUnit 2.9.2 单元测试框架
  • xunit.runner.visualstudio 2.2.0 测试运行工具

为什么要写单元测试

 一个项目中,可能比较庞大。所以,使用测试,可以减少耦合,提升代码的质量。也可以让后续开发人员,快速了解代码。

至于不写测试代码的原因有很多:比如,没必要;懒;不会。我属于不会的。

新写一个功能,重启一个项目,或者另外用main方法调用测试代码,很奇怪,测试起来效率低下。所以,简单入个门,把不会变为会。

框架选型

至于框架的选型。其实本人并不了解也没写过单元测试,这算是第一次真正接触吧。在不了解的情况下怎么选型呢?那就是看哪个最火、用的人多就选哪个。起码出了问题也容易同别人交流。

这里使用了XUnit 。

目标

发现,测试的概念有很多。现在,我需要实现的目标:1. 判断结果是不是自己想要的。2。将需要的结果输出。

开始前准备

  • 新建一个空项目 UnitTestingDemo
  • 新建类库 TestDemo (用于编写被测试的类)
  • 新建类库 TestDemo.Tests (用于编写单元测试)
  • 对类库 TestDemo.Tests 用nuget 安装XUnit 、xunit.runner.visualstudio 。
  • 添加 TestDemo.Tests 对 TestDemo 的引用

简单断言测试

新建一个方法。两个数相加的方法。

1 public class Arithmetic
2 {
3     public int Add(int nb1, int nb2)
4     {
5         return nb1 + nb2;
6     }
7 }

测试代码如下:

 1 public class Arithmetic_Tests
 2 {
 3     [Fact]//需要在测试方法加上特性Fact
 4     public void Add_Ok()
 5     {
 6         Arithmetic arithmetic = new Arithmetic();
 7         var sum = arithmetic.Add(1, 2);
 8         
 9         Assert.True(sum == 3);//断言验证
10     }
11 }

测试之前,可以开启Live Unit Test)。我们可以启用它进行实时的测试。也就是我们编辑单元测试,然后保存的时候,它会自动生成自动测试,最后得出结果。(我在工具那里没找到。暂时不影响后续继续使用)

 点击待测试的项目,或者按【Crlt+R】+ 【Crlt+T】运行。

 运行后,可以看到绿色的狗,表示通过。

带输出的测试

上述代码,我们只能知道,结果是否正确。比如,你断言1+2的结果为3。如果运行错误,(比如结果为2),你只知道错了,但不知道错的结果是什么(当然,你可以加断点看),如果能直接将运行结果输出,是否更好? Console.WriteLine(sum); 没有报错,但没有输出。

于是,我们重构测试方法。

1 private readonly ITestOutputHelper _output;
2 
3 public ArithmeticTest(ITestOutputHelper output)
4 {
5     _output = output;
6 }

修改测试代码为:

1 [Fact]
2 public void Add_Ok()
3 {
4     Arithmetic arithmetic = new Arithmetic();
5    var sum = arithmetic.Add(2,2);
6     _output.WriteLine(sum.ToString()); // 输出将会被捕获并显示在测试结果中
7     Assert.True(sum == 4);
8 }

这样,返回结果中就有输出了。

 

 带参数的测试

注意到测试代码中的参数和结果都写死了。如果我们要对多种情况进行测试,岂不是需要写多个单元测试方法或者进行多次方法执行和断言。这也太麻烦了。在XUnit框架中为我们提供了Theory特性。使用如下:

 1 [Theory]
 2 [InlineData(2, 3, 5)]
 3 [InlineData(2, 4, 6)]
 4 [InlineData(2, 1, 3)] //对应测试方法的形参
 5 public void Add_Ok_Two(int nb1, int nb2, int result)
 6 {
 7     Arithmetic arithmetic = new Arithmetic();
 8     var sum = arithmetic.Add(nb1, nb2);
 9     Assert.True(sum == result);
10 }

参考地址

https://zhuanlan.zhihu.com/p/517412127

标签:C#,sum,单元测试,Add,测试,XUnit,public,Arithmetic
From: https://www.cnblogs.com/luyj00436/p/18471760

相关文章

  • 下载安装使用 Adobe Media Encoder (ME)专业视频编码软件
    目录一、软件简介1.1软件概述1.2功能特色1.3新功能亮点二、下载三、安装ME3.1解压安装包3.2运行安装程序3.3完成安装3.4自定义工作空间3.5导入视频与设置输出3.6开始编码一、软件简介1.1软件概述AdobeMediaEncoder(简称ME)是Adobe公司推出的一款......
  • 手把手教你学 GPU SoC 芯片(9.3)--GPU SOC 功耗和热管理的动态电压和频率调整(DVFS)
    目录DVFS的基本原理DVFS的技术实现1.硬件支持硬件组件2.软件支持常见接口3.动态调整策略基于负载的调整基于温度的调整基于功耗的调整示例:在Linux系统中实现DVFS1.查看当前频率和电压2.设置目标频率3.启用DVFS4.设置DVFS策略示例:在CUDA中实现DVFS1.使......
  • 洛谷题单指南-字符串-P2922 [USACO08DEC] Secret Message G
    原题链接:https://www.luogu.com.cn/problem/P2922题意解读:已知M个01串,给出N个01串,对于N个串的每一个,求在M个串中有多少与其有公共前缀,且前缀长度是两个串中较小者。解题思路:用Trie树存储M个01串,用cnt1[]记录某个节点结束的01串个数,cnt2[]记录经过某个节点的01串的数量对于N个0......
  • VCLP使用指南-1.简介
    简介这一章节提供了对验证编译器平台(VerificationCompilerPlatform)、VC静态平台(VCStaticPlatform)和VCLP的介绍。本章分为以下几个部分:-验证编译器平台-VC静态和形式化平台-VCLP验证编译器平台当今的电子消费品市场受到对移动性、便携性和可靠性的巨大需求的推动......
  • c#声明枚举,通过枚举int获取枚举value、通过枚举value获取int值、判断string值是否存在
    c#声明枚举,通过枚举int获取枚举value、通过枚举value获取int值、判断string值是否存在枚举中 1、声明枚举每个枚举常量可以用一个标识符来表示,也可以为它们指定一个整数值,如果没有指定,那么默认从 0 开始递增。注意:第一个枚举成员的默认值为整型的0,后续枚举成员的值在前......
  • 【CANoe】智能座舱、使用Capl脚本自动化发送报文
    使用Capl脚本发送报文:CAPL脚本是CANoe中一种类C的语言,需要与网络节点关联,也可以利用其加强测量分析功能,以及搭建高效的自动化测试模块。1.定时器比如我们需要周期性的发送CAN报文,或者周期性的检测某个系统变量的变化时就需要用到定时器。#使用定时器的第一步就是申明定时......
  • VCLP使用指南-2.开始使用vclp
    开始使用VCLP本节描述了如何开始使用VCLP。本节假设已经拥有该软件的许可证副本,并已将其安装在系统上。本章分为以下几个部分:•前提条件•设置VCLP设计环境•配置消息标签•运行电气签核检查前提条件VCLP需要输入设计的设计RTL(Verilog、VHDL、SVD)、网表(Verilo......
  • 基于yolov5的手机屏幕缺陷检测系统,支持图像、视频和摄像实时检测【pytorch框架、pytho
     更多目标检测和图像分类识别项目可看我主页其他文章功能演示:yolov5,手机屏幕缺陷检测系统,支持图像、视频和摄像实时检测【pytorch框架、python源码】_哔哩哔哩_bilibili(一)简介基于YOLOv5的手机屏幕缺陷检测系统是在PyTorch框架之下得以实现的。这是一个完备的项目,涵盖......
  • 2019-3-13-win10-uwp-使用-ScaleTransform-放大某个元素
    titleauthordateCreateTimecategorieswin10uwp使用ScaleTransform放大某个元素lindexi2019-3-1319:5:56+08002019-03-1316:50:36+0800Win10UWP本文告诉大家如何通过ScaleTransform放大元素放大一个元素的方法有很多个,通过ScaleTransform放大是比较清真的在UWP中Sc......
  • msvcp120.dll怎么修复?msvcp120.dll丢失的原因及解决方法
    msvcp120.dll是MicrosoftVisualC++2013Redistributable包中的一个重要文件,它为许多基于Windows的应用程序提供运行时支持。当这个DLL文件缺失或损坏时,可能会导致某些程序无法正常启动或运行。本文将探讨msvcp120.dll文件丢失的常见原因,并提供三种有效的解决方案来......