這篇文章給大家分享的是有關(guān)在.NET開發(fā)中的單元測試工具之xUnit.Net有什么用的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
成都創(chuàng)新互聯(lián)主營濟源網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app軟件定制開發(fā),濟源h5小程序設(shè)計搭建,濟源網(wǎng)站營銷推廣歡迎濟源等地區(qū)企業(yè)咨詢
xUnit.Net介紹
xUnit.net的創(chuàng)造者的創(chuàng)造者是Jim Newkirk和Brad Wilson從包括NUnit及其它單元測試框架的使用經(jīng)驗中總結(jié)出來的一個新框架,相比于NUnit,xUnit.net有如下特點:
為每個測試方法產(chǎn)生一個對象實例
取消了[SetUp]和[TearDown]
取消了[ExpectedException]
類似于Aspect的功能
減少了自定義屬性(Attribute)的數(shù)目
采用泛型
匿名委托
可擴展的斷言
可擴展的測試方法
可擴展的測試類
xUnit.net的官方網(wǎng)站是:http://xunit.codeplex.com,下面是xUnit.net的運行界面:
注意在下載的xUnit.net壓縮包內(nèi)有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標(biāo)記
如果以前使用過NUnit或者VS自帶的MSTest測試工具,下面的對比表格會讓你很容易上手xUnit.net:
NUnit 2.2 | MSTest | xUnit.net | 備注 |
[Test] | [TestMethod] | [Fact] | 標(biāo)記為測試方法 |
[TestFixture] | [TestClass] | n/a | 包含有測試方法的類,在xUnit.net中無需標(biāo)記,它會查找程序集中所有的public的測試方法 |
[ExpectedException] | [ExpectedException] | Assert.Throws/ Record.Exception | 期望拋出異常 |
[SetUp] | [TestInitialize] | Constructor(即構(gòu)造函數(shù)) | 在每個測試方法執(zhí)行之前用于初始化的方法 |
[TearDown] | [TestCleanup] | IDisposable.Dispose | 在每個測試方法執(zhí)行之后用于結(jié)束的方法 |
[TestFixtureSetUp] | [ClassInitialize] | IUseFixture | 在所有測試方法執(zhí)行之前用于初始化的方法 |
[TestFixtureTearDown] | [ClassCleanup] | IUseFixture | 在所有測試方法執(zhí)行之后用于結(jié)束的方法 |
[Ignore] | [Ignore] | [Fact(Skip="reason")] | 臨時忽略被標(biāo)記的方法 |
n/a | [Timeout] | [Fact(Timeout=n)] | 用于指定被測試方法的最大執(zhí)行時間(單位毫秒),如果超過指定時間則會被標(biāo)記為測試失敗 |
[Property] | [TestProperty] | [Trait] | Set arbitrary metadata on a test |
n/a | [DataSource] | [Theory], [XxxData] |
xUnit.Net的斷言(Assertions)
下面的表格也是一個關(guān)于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 | 確保數(shù)據(jù)在某個范圍內(nèi) |
n/a | n/a | Throws | 確保會拋出異常 |
xUnit.Net的項目文件結(jié)構(gòu)
因為在可視化方面xUnit.Net不如NUnit,所以這里有必要介紹一下它的項目文件.xunit的組成元素。.xunit實際上也是一個xml文件,它的根節(jié)點是
filename:這是必須屬性,用于指定包含在項目中的絕對或者相對路徑的文件。
config-filename:這個是非必須屬性,用于指定測試時所使用的config文件,默認(rèn)是none,表示不適用任何配置文件。
shadow-copy:運行測試時是否對dll進(jìn)行shadow-copy,默認(rèn)是true,這個咱還不清楚true/false對程序的影響。
下面就是一個例子,在例子中執(zhí)行指明了測試中使用的config文件:
xUnit.Net的使用
xUnit.Net的常見用法很簡單,對于屬性NUnit的筒子們來說,輕松掌握xUnit.net的常見用法不在話下,下面就是一個簡單例子(實現(xiàn)添加了config文件并做了相應(yīng)配置,詳情見本系列之一):
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() { //不區(qū)分大小寫等值判斷 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() { //在這里可以做測試結(jié)束后的收尾工作 System.Console.WriteLine("Dispose"); } } }
程序運行效果如下:
總結(jié)
作為NUnit的改進(jìn)版,xUnit.Net確實克服了NUnit的不少缺點(關(guān)于NUnit的缺點和不足之處請見上一篇《在.NET開發(fā)中的單元測試工具之(1)——NUnit》),和NUnit的Assert API相比,xUnit.Net的Assert更精簡但是又足以滿足單元測試的需要,相比之下NUnit的Assert API略顯臃腫(這可能是跟它是從.Net1.1一直支持過來并且要保持向下兼容有關(guān)),但在GUI的易用性方面xUnit.Net不如NUnit,NUnit的GUI提供了很多配置界面,使配置工作可以通過界面設(shè)置完成,但相同的工作在xUnit.Net中則需要在項目文件中通過配置節(jié)點實現(xiàn)(比如指定config文件)。
此外,NUnit和xUnit.Net都在一定程度上支持VS,比如可以使用xUnit.Net同一目錄下的xunit.installer.exe來配置對VS的支持,下圖是運行xunit.installer.exe時的界面:
感謝各位的閱讀!關(guān)于“在.NET開發(fā)中的單元測試工具之xUnit.Net有什么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!