溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

在.NET開(kāi)發(fā)中的單元測(cè)試工具之xUnit.Net有什么用

發(fā)布時(shí)間:2021-11-30 15:20:02 來(lái)源:億速云 閱讀:209 作者:小新 欄目:編程語(yǔ)言

這篇文章給大家分享的是有關(guān)在.NET開(kāi)發(fā)中的單元測(cè)試工具之xUnit.Net有什么用的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

xUnit.Net介紹

xUnit.net的創(chuàng)造者的創(chuàng)造者是Jim Newkirk和Brad Wilson從包括NUnit及其它單元測(cè)試框架的使用經(jīng)驗(yàn)中總結(jié)出來(lái)的一個(gè)新框架,相比于NUnit,xUnit.net有如下特點(diǎn):

為每個(gè)測(cè)試方法產(chǎn)生一個(gè)對(duì)象實(shí)例

取消了[SetUp]和[TearDown]

取消了[ExpectedException]

類(lèi)似于Aspect的功能

減少了自定義屬性(Attribute)的數(shù)目

采用泛型

匿名委托

可擴(kuò)展的斷言

可擴(kuò)展的測(cè)試方法

可擴(kuò)展的測(cè)試類(lèi)

xUnit.net的官方網(wǎng)站是:http://xunit.codeplex.com,下面是xUnit.net的運(yùn)行界面:

在.NET開(kāi)發(fā)中的單元測(cè)試工具之xUnit.Net有什么用

注意在下載的xUnit.net壓縮包內(nèi)有4個(gè)支持GUI方式運(yùn)行的exe文件,分別是:

xunit.gui.clr4.exe:用于在x64及.Net4.0下運(yùn)行xUnit.net。

xunit.gui.clr4.x86.exe:用于在x86及.Net4.0下運(yùn)行xUnit.net。

Xunit.gui.exe:用于在x64及.Net4.0以下版本運(yùn)行xUnit.net。

xunit.gui.x86.exe:用于在x86及.Net4.0以下版本運(yùn)行xUnit.net。

xUnit.Net下載與安裝

xUnit.Net的常用Attribute標(biāo)記

如果以前使用過(guò)NUnit或者VS自帶的MSTest測(cè)試工具,下面的對(duì)比表格會(huì)讓你很容易上手xUnit.net:

NUnit 2.2

MSTest

xUnit.net

備注

[Test]

[TestMethod]

[Fact]

標(biāo)記為測(cè)試方法

[TestFixture]

[TestClass]

n/a

包含有測(cè)試方法的類(lèi),在xUnit.net中無(wú)需標(biāo)記,它會(huì)查找程序集中所有的public的測(cè)試方法

[ExpectedException]

[ExpectedException]

Assert.Throws/ Record.Exception

期望拋出異常

[SetUp]

[TestInitialize]

Constructor(即構(gòu)造函數(shù))

在每個(gè)測(cè)試方法執(zhí)行之前用于初始化的方法

[TearDown]

[TestCleanup]

IDisposable.Dispose

在每個(gè)測(cè)試方法執(zhí)行之后用于結(jié)束的方法

[TestFixtureSetUp]

[ClassInitialize]

IUseFixture<T>

在所有測(cè)試方法執(zhí)行之前用于初始化的方法

[TestFixtureTearDown]

[ClassCleanup]

IUseFixture<T>

在所有測(cè)試方法執(zhí)行之后用于結(jié)束的方法

[Ignore]

[Ignore]

[Fact(Skip="reason")]

臨時(shí)忽略被標(biāo)記的方法

n/a

[Timeout]

[Fact(Timeout=n)]

用于指定被測(cè)試方法的最大執(zhí)行時(shí)間(單位毫秒),如果超過(guò)指定時(shí)間則會(huì)被標(biāo)記為測(cè)試失敗

[Property]

[TestProperty]

[Trait]

Set arbitrary metadata on a test

n/a

[DataSource]

[Theory], [XxxData]


xUnit.Net的斷言(Assertions)

下面的表格也是一個(gè)關(guān)于NUnit、MSTest及xUnit.Net斷言的對(duì)比。

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ù)在某個(gè)范圍內(nèi)

n/a

n/a

Throws

確保會(huì)拋出異常

xUnit.Net的項(xiàng)目文件結(jié)構(gòu)

因?yàn)樵诳梢暬矫鎥Unit.Net不如NUnit,所以這里有必要介紹一下它的項(xiàng)目文件.xunit的組成元素。.xunit實(shí)際上也是一個(gè)xml文件,它的根節(jié)點(diǎn)是<xunit>,<xunit>有<assemblies>子節(jié)點(diǎn),<assemblies>下可以有多個(gè)<assembly>節(jié)點(diǎn)。<assembly>節(jié)點(diǎn)包含以下屬性:

filename:這是必須屬性,用于指定包含在項(xiàng)目中的絕對(duì)或者相對(duì)路徑的文件。

config-filename:這個(gè)是非必須屬性,用于指定測(cè)試時(shí)所使用的config文件,默認(rèn)是none,表示不適用任何配置文件。

shadow-copy:運(yùn)行測(cè)試時(shí)是否對(duì)dll進(jìn)行shadow-copy,默認(rèn)是true,這個(gè)咱還不清楚true/false對(duì)程序的影響。

下面就是一個(gè)例子,在例子中執(zhí)行指明了測(cè)試中使用的config文件:

<?xml version="1.0" encoding="utf-8"?> <xunit>   <assemblies>     <assembly filename="bin\Debug\XunitDemo.exe" config-filename="bin\Debug\XunitDemo.exe.config" shadow-copy="true"/>     <assembly filename="bin\Debug\xunit.dll" shadow-copy="true" />   </assemblies> </xunit>

xUnit.Net的使用

xUnit.Net的常見(jiàn)用法很簡(jiǎn)單,對(duì)于屬性NUnit的筒子們來(lái)說(shuō),輕松掌握xUnit.net的常見(jiàn)用法不在話下,下面就是一個(gè)簡(jiǎn)單例子(實(shí)現(xiàn)添加了config文件并做了相應(yīng)配置,詳情見(jiàn)本系列之一):

using System; using Xunit; using System.Configuration; namespace XunitDemo {     public class XunitDemo:IDisposable     {         public XunitDemo()         {             //在這里可以做測(cè)試開(kāi)始前的初始化工作             System.Console.WriteLine("Init");         }         [Fact]         public void TestAdd()         {             Assert.Equal<int>(5, 2 + 3);         }         [Fact(Timeout=900)]//指定超時(shí)為900ms         public void TestTimeout()         {             System.Threading.Thread.Sleep(1000);             Assert.InRange<double>(new Random().NextDouble()*10,5,10);         }         [Fact]         public void Test0_51CTOBlog()         {             //不區(qū)分大小寫(xiě)等值判斷             Assert.Equal<bool>(true,string.Equals(ConfigurationManager.AppSettings["51ctoBlog"], "http://zhoufoxcn.blog.51cto.com",StringComparison.InvariantCultureIgnoreCase);         }         [Fact]         public void Test0_CSDNBlog()         {             Assert.Equal<string>(ConfigurationManager.AppSettings["CSDNBlog"], "http://blog.csdn.net/zhoufoxcn");         }         [Fact]         public void Test0_SinaWeiBo()         {             Assert.Equal<string>(ConfigurationManager.AppSettings["SinaWeiBo"], "http://weibo.com/zhoufoxcn");         }         public void Dispose()         {             //在這里可以做測(cè)試結(jié)束后的收尾工作             System.Console.WriteLine("Dispose");         }     } }

程序運(yùn)行效果如下:

在.NET開(kāi)發(fā)中的單元測(cè)試工具之xUnit.Net有什么用

總結(jié)

作為NUnit的改進(jìn)版,xUnit.Net確實(shí)克服了NUnit的不少缺點(diǎn)(關(guān)于NUnit的缺點(diǎn)和不足之處請(qǐng)見(jiàn)上一篇《在.NET開(kāi)發(fā)中的單元測(cè)試工具之(1)&mdash;&mdash;NUnit》),和NUnit的Assert API相比,xUnit.Net的Assert更精簡(jiǎn)但是又足以滿(mǎn)足單元測(cè)試的需要,相比之下NUnit的Assert API略顯臃腫(這可能是跟它是從.Net1.1一直支持過(guò)來(lái)并且要保持向下兼容有關(guān)),但在GUI的易用性方面xUnit.Net不如NUnit,NUnit的GUI提供了很多配置界面,使配置工作可以通過(guò)界面設(shè)置完成,但相同的工作在xUnit.Net中則需要在項(xiàng)目文件中通過(guò)配置節(jié)點(diǎn)實(shí)現(xiàn)(比如指定config文件)。

此外,NUnit和xUnit.Net都在一定程度上支持VS,比如可以使用xUnit.Net同一目錄下的xunit.installer.exe來(lái)配置對(duì)VS的支持,下圖是運(yùn)行xunit.installer.exe時(shí)的界面:

在.NET開(kāi)發(fā)中的單元測(cè)試工具之xUnit.Net有什么用

感謝各位的閱讀!關(guān)于“在.NET開(kāi)發(fā)中的單元測(cè)試工具之xUnit.Net有什么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI