xuint和其他的单元测试框架的比较

主要从2个方面比较,特性和断言

第一部分 :特性的比较。

NUnit 2.2 MSTest xUnit.net Comments
[Test] [TestMethod] [Fact] 代表测试方法
[TestFixture] [TestClass] n/a xuint不需要为任何一个类准备特性。它会在程序集public类中进行测试方法的查询。Note1
[ExpectedException] [ExpectedException] Assert.Throws 或者
Record.Exception
xunit已经放弃了异常的特性并选择了Assert.Thorws方式
[SetUp] [TestInitialize] Constructor 使用SetUp这个特性非常的不好。Note2
[TearDown] [TestCleanup] IDisposable.Dispose 使用TearDown特性非常的不好。可以使用IDisposable.Dispose 实现。Note2
[TestFixtureSetUp] [ClassInitialize] IUseFixture<T> 每一个测试案例运行前要运行的代码,可以在测试类上实现IUseFixture<T>。Note3
[TestFixtureTearDown] [ClassCleanup] IUseFixture<T> 每一个测试案例运行完毕后要运行的代码,可以在测试类上实现IUseFixture<T>。Note3
[Ignore] [Ignore] [Fact(Skip="reason")] 在Fact特性中进行跳过测试设置。
n/a [Timeout] [Fact(Timeout=n)] 在Fact特性中进行超时设置。参数是以毫秒为单位。、
[Property] [TestProperty] [Trait]   在测试上上设置任意元数据
n/a [DataSource] [Theory], [XxxData] 理论上的数据驱动测试。 Note4

Note1:较长时间都是使用[ExpectedException]揭露出多方面的问题。首先,它没有非常的明确的交代出哪行代码应该抛出一个异常。

在已通过的测试中很难精确的跟踪异常。其次,它并不提供异常的详细信息,因为超出测试范围的代码不能被处理到。Assert.Throw允许你在一段代码中测试异常,并在成功断言的时候返回这个异常,你可以对此进行更深入的断言。

Note2 :  xUnit.net的团队认为每一次测试的安装和卸载很难去调试代码,经常会导致一些在测试中不必要的运行。
Note 3:xUnit.net提供了一种新的思考方式,每一个测试案例都是用IUseFixture<T>接口。通过这个接口,你告诉测试系统,你希望在每一个测试案例运行前提供一些测试数据。程序会创建一个单例的测试数据对象,并在运行每一个测试的时候通过SetFixture来传递对象。
所有的测试共享这个数据实例。运行完所有的测试后,程序会通过实现IDisponsable来释放掉测试数据。

Note4:扩展库(xunit.extensions.dll)提供了理论上的数据驱动测试。使用[Theory]特性,然后使用[XxxData]等等特性,包括但不限于:([InlineData], [PropertyData], [ExcelData], [SqlServerData], and [OleDbData])。

第二部分:断言比较。

xunit.net移除了大多Are和Is关键字。NUnit 2.2.1.0的断言大多都是用于比较目的;NUnit 2.4提供了NUnit2.2.x和NUnit2.4更贴近自然语言2种风格。

NUnit 2.2 MSTest xUnit.net Comments
AreEqual AreEqual Equal MSTest and xUnit.net中这个方法有范型版本
AreNotEqual AreNotEqual NotEqual MSTest and xUnit.net 中这个方法有范型版本
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 xUnit.net 实现方式:Assert.True(false, "message")
Greater n/a n/a xUnit.net 实现方式: Assert.True(x > y)
Ignore Inconclusive n/a  
n/a n/a InRange 确实值在一定范围内。(Nunit和MSTest在AreEqual方法中可以实现这个功能)
IsAssignableFrom n/a IsAssignableFrom  
IsEmpty n/a Empty  
IsFalse IsFalse False  
IsInstanceOfType IsInstanceOfType IsType  
IsNaN n/a n/a xUnit.net 实现方式: Assert.True(double.IsNaN(x))
IsNotAssignableFrom n/a n/a xUnit.net 实现方式: 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 xUnit.net 实现方式: Assert.True(x < y)
n/a n/a NotInRange 确保值不在某个区间中
n/a n/a Throws 确保代码抛出了异常

 

这个文章写的比较累,有些地方自己也没亲自去体验,但是如果我发现了错误,一定会及时纠正。

原文来自:http://xunit.codeplex.com/wikipage?title=Comparisons&referringTitle=Home

posted @ 2012-04-08 23:48 _风行 阅读(...) 评论(...) 编辑 收藏