在.NET开发中的单元测试工具之——xUnit.Net
在上一篇《在.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时的界面:
 

单元测试工具之Xunit的更多相关文章

  1. 在.NET开发中的单元测试工具之(2)——xUnit.Net

    在上一篇<在.NET开发中的单元测试工具之(1)——NUnit>中讲述了如何使用NUnit在.NET开发中进行单元测试以及NUnit的一些缺点,今天将讲述如何使用xUnit.Net来进行单 ...

  2. 在.NET开发中的单元测试工具之(1)——NUnit

    NUnit介绍 NUnit是一个专门针对于.NET来写的单元测试框架,它是xUnit体系中的一员,在xUnit体系中还有针对Java的JUnit和针对C++的CPPUnit,在开始的时候NUnit和x ...

  3. 在.NET开发中的单元测试工具之——NUnit

    NUnit介绍 NUnit是一个专门针对于.NET来写的单元测试框架,它是xUnit体系中的一员,在xUnit体系中还有针对Java的JUnit和针对C++的CPPUnit,在开始的时候NUnit和x ...

  4. 主流的单元测试工具之-JAVA新特性-Annotation 写作者:组长 梁伟龙

    1:什么是Annotation?Annotation,即“@xxx”(如@Before,@After,@Test(timeout=xxx),@ignore),这个单词一般是翻译成元数据,是JAVA的一 ...

  5. codeblocks+Mingw 下配置开源c++单元测试工具 google test

    google test 是google的c++开源单元测试工具,chrome的开发团队就是使用它. Code::Blocks 12.11(MinGW 4.7.1) (Windows版)Google T ...

  6. PHP单元测试工具PHPUnit初体验

    今天接到了个任务,需要对数字进行计算,因为涉及到整数,小数,和科学计数法等很多条件,所以人工测试非常麻烦,于是想到了PHP的单元测试工具PHPUnit,所以写个文档备查. 看了PHPUnit的文档之后 ...

  7. Java单元测试工具:JUnit4(一)(二)(三)(四)

    Java单元测试工具:JUnit4(一)--概述及简单例子 Java单元测试工具:JUnit4(二)--JUnit使用详解 Java单元测试工具:JUnit4(三)--JUnit详解之运行流程及常用注 ...

  8. 单元测试工具 SmokeTest

    .NET 程序集单元测试工具 SmokeTest Smoke Test(冒烟测试),也称Regression Test(回归测试),是对软件的安装和基本功能的测试.一般地我们使用脚本来实现Smoke ...

  9. Web Service单元测试工具实例介绍之SoapUI

    原文  Web Service单元测试工具实例介绍之SoapUI SoapUI是当前比较简单实用的开源Web Service测试工具,提供桌面应用程序和IDE插件程序两种使用方式.能够快速构建项目和组 ...

随机推荐

  1. EvnetBus

    领域事件(EvnetBus)   文档目录 本节内容: EventBus 注入 IEventBus 获取默认实例 定义事件 预定义事件 处理完异常 实体修改 触发事件 处理事件 处理基类事件 处理程序 ...

  2. DB天气app冲刺二阶段第一天

    原来找人也是个力气活...好费劲呀..今天的进度有点慢,,确切的说是没有什么进度 因为不会弄了..加上今天一个劲的找同学帮忙写评论.心思没定下来 根本没思路了..明天按照今天的计划继续冲刺..

  3. (转)[C++语法] 关键字typedef用法

    转自http://www.cnblogs.com/SweetDream/archive/2006/05/10/395921.html C/C++语言中的typedef相信大家已经不陌生,本文对C/C+ ...

  4. centos7 下手动安装MySQL-5.6.32-1.linux_glibc2.5.x86_64.rpm-bundle

    由于centos7默认不再是mysql数据库,所以度算手动安装一个. 全程参考http://www.2cto.com/database/201501/371451.html 这里摘抄以下这个链接的内容 ...

  5. Eclipse编辑jsp、js文件时,经常出现卡死现象解决汇总

    使用Eclipse编辑jsp.js文件时,经常出现卡死现象,在网上百度了N次,经过N次优化调整后,卡死现象逐步好转,具体那个方法起到作用,不太好讲.将所有用过的方法罗列如下: 1.取消验证 windo ...

  6. [转载]mongoDB学习笔记——存取图片(C#)

    作为一个NoSql数据库的代表,存取多媒体数据,应该是强项吧?那么,图片在mongoDB里是如何存取的呢?(其实,关系型数据库存取图片也一点问题没有,所以我看NoSql的强项不在于是否存储多媒体,而在 ...

  7. A geometric interpretation of the covariance matrix

    A geometric interpretation of the covariance matrix Contents [hide] 1 Introduction 2 Eigendecomposit ...

  8. java jdbc dbcp连接SQL Server

    使用到的jar: commons-collections-3.1.jar commons-dbcp-1.4.jar commons-pool-1.5.6.jar sqljdbc4.jar dbcp配置 ...

  9. 万网空间如何安装wordpress

    万网空间如何安装wordpress建站教程 _ 学做网站论坛 http://www.xuewangzhan.com/wpbbs/1643.html   1.先在本地下载一个最新版本的wordpress ...

  10. MyBatis的动态SQL操作--插入

    需求:向数据库中插入一条数据 //id,name,sal非空,三个字段都插入 insert into student(id,name,sal) values (?,?,?) //id,name非空,只 ...