首页 > 其他分享 >单元测试工具之Xunit

单元测试工具之Xunit

时间:2023-03-11 12:13:00浏览次数:47  
标签:NUnit net Xunit 单元测试 Assert xUnit 工具 Net 测试方法

https://www.bbsmax.com/A/nAJvkgba5r/

 

在.NET开发中的单元测试工具之——xUnit.Net  原始出处 http://zhoufoxcn.blog.51cto.com/792419/1172320 在上一篇《在.NET开发中的单元测试工具之(1)——NUnit》中讲述了如何使用NUnit在.NET开发中进行单元测试以及NUnit的一些缺点,今天将讲述如何使用xUnit.Net来进行单元测试。 xUnit.Net介绍 xUnit.net的创造者的创造者是Jim Newkirk和Brad Wilson从包括NUnit及其它单元测试框架的使用经验中总结出来的一个新框架,相比于NUnit,xUnit.net有如下特点: 为每个测试方法产生一个对象实例 取消了[SetUp]和[TearDown] 取消了[ExpectedException] 类似于Aspect的功能 减少了自定义属性(Attribute)的数目 采用泛型 匿名委托 可扩展的断言 可扩展的测试方法 可扩展的测试类 xUnit.net的官方网站是:http://xunit.codeplex.com 注意在下载的xUnit.net压缩包内有4个支持GUI方式运行的exe文件,分别是: xunit.gui.clr4.exe:用于在x64及.Net4.0下运行xUnit.net。 xunit.gui.clr4.x86.exe:用于在x86及.Net4.0下运行xUnit.net。 Xunit.gui.exe:用于在x64及.Net4.0以下版本运行xUnit.net。 xunit.gui.x86.exe:用于在x86及.Net4.0以下版本运行xUnit.net。 xUnit.Net下载与安装 xUnit.Net的常用Attribute标记 如果以前使用过NUnit或者VS自带的MSTest测试工具,下面的对比表格会让你很容易上手xUnit.net:
NUnit 2.2 MSTest xUnit.net 备注
[Test] [TestMethod] [Fact] 标记为测试方法
[TestFixture] [TestClass] n/a 包含有测试方法的类,在xUnit.net中无需标记,它会查找程序集中所有的public的测试方法
[ExpectedException] [ExpectedException] Assert.Throws/ Record.Exception 期望抛出异常
[SetUp] [TestInitialize] Constructor(即构造函数) 在每个测试方法执行之前用于初始化的方法
[TearDown] [TestCleanup] IDisposable.Dispose 在每个测试方法执行之后用于结束的方法
[TestFixtureSetUp] [ClassInitialize] IUseFixture<T> 在所有测试方法执行之前用于初始化的方法
[TestFixtureTearDown] [ClassCleanup] IUseFixture<T> 在所有测试方法执行之后用于结束的方法
[Ignore] [Ignore] [Fact(Skip="reason")] 临时忽略被标记的方法
n/a [Timeout] [Fact(Timeout=n)] 用于指定被测试方法的最大执行时间(单位毫秒),如果超过指定时间则会被标记为测试失败
[Property] [TestProperty] [Trait] Set arbitrary metadata on a test
n/a [DataSource] [Theory], [XxxData]
xUnit.Net的断言(Assertions) 下面的表格也是一个关于NUnit、MSTest及xUnit.Net断言的对比。
NUnit 2.2 MSTest xUnit.net 备注
AreEqual AreEqual Equal 相等比较
AreNotEqual AreNotEqual NotEqual 不相等比较
AreNotSame AreNotSame NotSame 不相同比较
AreSame AreSame Same 相同比较
Contains Contains (on CollectionAssert) Contains
DoAssert n/a n/a
n/a DoesNotContain (on CollectionAssert) DoesNotContain
n/a n/a DoesNotThrow
Fail Fail n/a 可用Assert.True(false, "message")替代
Greater n/a n/a 可用Assert.True(x > y)替代
Ignore Inconclusive n/a
n/a n/a InRange
IsAssignableFrom n/a IsAssignableFrom
IsEmpty n/a Empty
IsFalse IsFalse False
IsInstanceOfType IsInstanceOfType IsType
IsNaN n/a n/a 可用Assert.True(double.IsNaN(x))替代
IsNotAssignableFrom n/a n/a 可用Assert.False(obj is Type)替代
IsNotEmpty n/a NotEmpty
IsNotInstanceOfType IsNotInstanceOfType IsNotType
IsNotNull IsNotNull NotNull
IsNull IsNull Null
IsTrue IsTrue True
Less n/a n/a 可用Assert.True(x < y)替代
n/a n/a NotInRange 确保数据在某个范围内
n/a n/a Throws 确保会抛出异常
xUnit.Net的项目文件结构 因为在可视化方面xUnit.Net不如NUnit,所以这里有必要介绍一下它的项目文件.xunit的组成元素。.xunit实际上也是一个xml文件,它的根节点是<xunit>,<xunit>有<assemblies>子节点,<assemblies>下可以有多个<assembly>节点。<assembly>节点包含以下属性: filename:这是必须属性,用于指定包含在项目中的绝对或者相对路径的文件。 config-filename:这个是非必须属性,用于指定测试时所使用的config文件,默认是none,表示不适用任何配置文件。 shadow-copy:运行测试时是否对dll进行shadow-copy,默认是true,这个咱还不清楚true/false对程序的影响。 下面就是一个例子,在例子中执行指明了测试中使用的config文件:  
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <xunit>
  3. <assemblies>
  4. <assembly filename="bin\Debug\XunitDemo.exe" config-filename="bin\Debug\XunitDemo.exe.config" shadow-copy="true"/>
  5. <assembly filename="bin\Debug\xunit.dll" shadow-copy="true" />
  6. </assemblies>
  7. </xunit>
xUnit.Net的使用 xUnit.Net的常见用法很简单,对于属性NUnit的筒子们来说,轻松掌握xUnit.net的常见用法不在话下,下面就是一个简单例子(实现添加了config文件并做了相应配置,详情见本系列之一):  
  1. using System;
  2. using Xunit;
  3. using System.Configuration;
  4. namespace XunitDemo
  5. {
  6. public class XunitDemo:IDisposable
  7. {
  8. public XunitDemo()
  9. {
  10. //在这里可以做测试开始前的初始化工作
  11. System.Console.WriteLine("Init");
  12. }
  13. [Fact]
  14. public void TestAdd()
  15. {
  16. Assert.Equal<int>(5, 2 + 3);
  17. }
  18. [Fact(Timeout=900)]//指定超时为900ms
  19. public void TestTimeout()
  20. {
  21. System.Threading.Thread.Sleep(1000);
  22. Assert.InRange<double>(new Random().NextDouble()*10,5,10);
  23. }
  24. [Fact]
  25. public void Test0_51CTOBlog()
  26. {
  27. //不区分大小写等值判断
  28. Assert.Equal<bool>(true,string.Equals(ConfigurationManager.AppSettings["51ctoBlog"], "http://zhoufoxcn.blog.51cto.com",StringComparison.InvariantCultureIgnoreCase);
  29. }
  30. [Fact]
  31. public void Test0_CSDNBlog()
  32. {
  33. Assert.Equal<string>(ConfigurationManager.AppSettings["CSDNBlog"], "http://blog.csdn.net/zhoufoxcn");
  34. }
  35. [Fact]
  36. public void Test0_SinaWeiBo()
  37. {
  38. Assert.Equal<string>(ConfigurationManager.AppSettings["SinaWeiBo"], "http://weibo.com/zhoufoxcn");
  39. }
  40. public void Dispose()
  41. {
  42. //在这里可以做测试结束后的收尾工作
  43. System.Console.WriteLine("Dispose");
  44. }
  45. }
  46. }
总结 作为NUnit的改进版,xUnit.Net确实克服了NUnit的不少缺点(关于NUnit的缺点和不足之处请见上一篇《在.NET开发中的单元测试工具之(1)——NUnit》),和NUnit的Assert API相比,xUnit.Net的Assert更精简但是又足以满足单元测试的需要,相比之下NUnit的Assert API略显臃肿(这可能是跟它是从.Net1.1一直支持过来并且要保持向下兼容有关),但在GUI的易用性方面xUnit.Net不如NUnit,NUnit的GUI提供了很多配置界面,使配置工作可以通过界面设置完成,但相同的工作在xUnit.Net中则需要在项目文件中通过配置节点实现(比如指定config文件)。 此外,NUnit和xUnit.Net都在一定程度上支持VS,比如可以使用xUnit.Net同一目录下的xunit.installer.exe来配置对VS的支持,下图是运行xunit.installer.exe时的界面:

标签:NUnit,net,Xunit,单元测试,Assert,xUnit,工具,Net,测试方法
From: https://www.cnblogs.com/chinasoft/p/17205600.html

相关文章

  • 2023国家线-考研人爱不释手的宝藏资源网站-搜嗖工具箱
    研招网https://yz.chsi.com.cn说起这个网站,想必考研的小伙伴都不陌生,研招网是教育部全国硕士研究生招生考试网上报名和网上调剂指定网站,既是各研究生招生单位的宣传咨询......
  • 【数据分析:工具篇】NumPy(1)NumPy介绍
    (【数据分析:工具篇】NumPy(1)NumPy介绍)NumPy介绍NumPy(NumericalPython)是Python的一个开源的科学计算库,它主要用于处理大规模的多维数组以及矩阵操作。NumPy是在Python中进......
  • 肯天脱模剂案例研究| 先进技术带来更长的工具使用寿命
    小肯教授案例研究压铸一直是肯天的一部分压铸解决方案自始至终随着条件不断变得更加苛刻效率变得更加重要材料变得更加昂贵我们与客户一起努力发现每一种可能性本次案例研......
  • node版本控制工具nvm安装教程
    1.卸载node,后删除node文件夹里的所有内容2:安装nvm管理工具(1)下载地址:https://github.com/coreybutler/nvm-windows/releases(2)设置nvm安装目录,再设置node安装目录3......
  • .net 常用工具类收藏
    Masuit.Tools包含一些常用的操作类,大都是静态类,加密解密,反射操作,权重随机筛选算法,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期......
  • VScode开发者工具快捷键
    VScode开发者工具快捷键 VSCode打开文件夹与创建文件选择文件夹拖拽文件夹生成浏览器文件.html的快捷方式!+回车VSCode常用快捷键列表代码格式化:Sh......
  • 前端工具的选择与安装
    前端工具的选择与安装 前端常见开发工具工欲善其事必先利其器浏览器浏览器是我们最重要的合作伙伴 推荐选择我们推荐谷歌浏览器,有两点原因:简洁大方,打开......
  • 修改node项目自动重启 | nodemon工具包
    1、为什么使用nodemon(1)在编写调试Node.js项目的时候,如果修改了项目的代码,则需要频繁的手动close掉,然后再重新启动,非常繁琐。现在,我们可以使用nodemon工具包这个工......
  • Jmeter接口测试 2=> Jmeter工具的介绍
    第一节接口测试流程 参数化:EXCEl文件参数化、数据库参数化、直接代码中配置、配置文件 预处理请求(前置处理):对请求的参数进行预处理、准备,如加密数据、组织测试数据 发起......
  • fasttext工具的使用
    1.1认识fasttext工具学习目标了解fasttext工具的作用.了解fasttext工具的优势及其原因.掌握fasttext的安装方法.作为NLP工程领域常用的工具包,fasttext有两大作用:进行文......