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

这篇文章给大家分享的是有关在.NET开发中的单元测试工具之xUnit.Net有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

成都创新互联主营济源网站建设的网络公司,主营网站建设方案,app软件定制开发,济源h5小程序设计搭建,济源网站营销推广欢迎济源等地区企业咨询

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的运行界面:

在.NET开发中的单元测试工具之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");         }     } }

程序运行效果如下:

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

总结

作为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有什么用

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


分享名称:在.NET开发中的单元测试工具之xUnit.Net有什么用
文章分享:http://scyanting.com/article/jsjpph.html