千家信息网

在.NET开发中的单元测试工具之xUnit.Net有什么用

发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,这篇文章给大家分享的是有关在.NET开发中的单元测试工具之xUnit.Net有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。xUnit.Net介绍xUnit.net的
千家信息网最后更新 2024年11月26日在.NET开发中的单元测试工具之xUnit.Net有什么用

这篇文章给大家分享的是有关在.NET开发中的单元测试工具之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的运行界面:

注意在下载的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

在所有测试方法执行之前用于初始化的方法

[TestFixtureTearDown]

[ClassCleanup]

IUseFixture

在所有测试方法执行之后用于结束的方法

[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文件,它的根节点是子节点,下可以有多个节点。节点包含以下属性:

filename:这是必须属性,用于指定包含在项目中的绝对或者相对路径的文件。

config-filename:这个是非必须属性,用于指定测试时所使用的config文件,默认是none,表示不适用任何配置文件。

shadow-copy:运行测试时是否对dll进行shadow-copy,默认是true,这个咱还不清楚true/false对程序的影响。

下面就是一个例子,在例子中执行指明了测试中使用的config文件:

                  

xUnit.Net的使用

xUnit.Net的常见用法很简单,对于属性NUnit的筒子们来说,轻松掌握xUnit.net的常见用法不在话下,下面就是一个简单例子(实现添加了config文件并做了相应配置,详情见本系列之一):

using System; using Xunit; using System.Configuration; namespace XunitDemo {     public class XunitDemo:IDisposable     {         public XunitDemo()         {             //在这里可以做测试开始前的初始化工作             System.Console.WriteLine("Init");         }         [Fact]         public void TestAdd()         {             Assert.Equal(5, 2 + 3);         }         [Fact(Timeout=900)]//指定超时为900ms         public void TestTimeout()         {             System.Threading.Thread.Sleep(1000);             Assert.InRange(new Random().NextDouble()*10,5,10);         }         [Fact]         public void Test0_51CTOBlog()         {             //不区分大小写等值判断             Assert.Equal(true,string.Equals(ConfigurationManager.AppSettings["51ctoBlog"], "http://zhoufoxcn.blog.51cto.com",StringComparison.InvariantCultureIgnoreCase);         }         [Fact]         public void Test0_CSDNBlog()         {             Assert.Equal(ConfigurationManager.AppSettings["CSDNBlog"], "http://blog.csdn.net/zhoufoxcn");         }         [Fact]         public void Test0_SinaWeiBo()         {             Assert.Equal(ConfigurationManager.AppSettings["SinaWeiBo"], "http://weibo.com/zhoufoxcn");         }         public void Dispose()         {             //在这里可以做测试结束后的收尾工作             System.Console.WriteLine("Dispose");         }     } }

程序运行效果如下:

总结

作为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时的界面:

感谢各位的阅读!关于"在.NET开发中的单元测试工具之xUnit.Net有什么用"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

测试 方法 文件 运行 配置 单元 属性 标记 节点 工具 测试工具 界面 项目 工作 支持 开发 相同 例子 程序 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 代驾软件开发公司哪里的好 广州鑫盛互联网科技有限公司 数据库持久层技术 java不能连接数据库 跟踪查看页面对数据库的操作 网络安全项目产生的经济效益 软件开发工作周报模板 java导出数据到文件服务器 wordpress从数据库 sapb1系统用什么数据库 cs北京服务器 影响网购成交率有网络安全吗 深圳罗湖区软件开发公司 群晖nas 流媒体服务器 奔驰金融 软件开发 音兔里面找音乐显示服务器问题 西藏智慧养老软件开发系统 软件开发工具考题及答案 自学软件开发从零开始 iscc网络安全奖状 网络安全认证可以参加省考吗 嘉定区第三方软件开发问答知识 国家网络安全学院排名及分数 互联网创投联盟聚焦金融科技 进口以太网串口服务器哪家好 如何理解数据库的数据完整性 sql数据库没有安全性选项 天翼网关连不上服务器是怎么回事 数据库填写路径是什么意思 迈鼠互联网科技福建有限公司
0