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