.Net使用Xunit工具進(jìn)行單元測(cè)試
不管你愛與不愛,單元測(cè)試對(duì)于一個(gè)軟件的長(zhǎng)治久安還是必不可少的一環(huán)。在Visual Studio 2012后,VS中的測(cè)試瀏覽器也能與第三方的集成了,用起來(lái)還是非常方便的。目前在.Net框架下的測(cè)試工具主要有Nunit、內(nèi)置的MSTest以及Xunit這三個(gè)工具,本文就簡(jiǎn)單的介紹一下如何在VS中使用XUnit這個(gè)測(cè)試框架的后起之秀。
安裝Xunit:
Xunit的安裝現(xiàn)在不需要插件支持了,直接使用NuGet安裝如下兩個(gè)庫(kù)即可:
PM> Install-Package xunit PM> Install-Package xunit.runner.visualstudio -Pre (Visual Studio測(cè)試瀏覽器支持, VS2015目前必須裝Pre的)
編寫測(cè)試用例:
一個(gè)簡(jiǎn)單的測(cè)試用例如下:
public class TestClass1
{
[Fact]
public void testMax()
{
Assert.Equal(3, Math.Max(3, 2));
}
[Fact]
public void testFail()
{
Assert.Equal(2, Math.Max(3, 2));
}
}執(zhí)行測(cè)試用例
在測(cè)試瀏覽器中執(zhí)行RunAll即可(修改后不用編譯,它會(huì)自動(dòng)編譯)

測(cè)試方式說(shuō)明:
聲明測(cè)試用例:
Xunit里面不需要TestClass之類Attribute來(lái)標(biāo)記測(cè)試用例類,只需要滿足如下條件即可:
測(cè)試類必須是public的
測(cè)試用例用FactAttribute標(biāo)記
斷言:
Assert類用來(lái)驗(yàn)證測(cè)試測(cè)試函數(shù)的輸出結(jié)果。
Assert.Equal(3, Math.Max(3, 2));
也可以使用一些擴(kuò)展的斷言庫(kù),常用的就是xunit.should庫(kù),它是以擴(kuò)展函數(shù)的方式進(jìn)行驗(yàn)證,看起來(lái)更加舒服。
PM> Install-Package xunit.should
Math.Max(3, 2).ShouldBe(3);
不過(guò),這個(gè)庫(kù)和新版本的XUnit適配不是很好,我這里寫了一個(gè)簡(jiǎn)單的版本:
static class AssertExtension
{
public static void ShouldBe<T>(this T value, T exprected)
{
if(Equals(value, exprected))
return;
var msg = $"與預(yù)期結(jié)果不一致,當(dāng)前值是 '{format(value)}', 期望值是 '{format(exprected)}'";
throw new InvalidOperationException(msg);
}
public static void ShouldNotBe<T>(this T value, T notExprected)
{
if (!Equals(value, notExprected))
return;
var msg = $"與預(yù)期結(jié)果不一致,當(dāng)前值不應(yīng)該是 '{format(notExprected)}' ";
throw new InvalidOperationException(msg);
}
static string format(object value)
{
return value == null ? "NULL" : value.ToString();
}
}構(gòu)建和析構(gòu):
Xunit里面并不是通過(guò)SetUp和TearDown標(biāo)記來(lái)表明測(cè)試用例的構(gòu)建和析構(gòu)操作,它每次執(zhí)行測(cè)試用例的時(shí)候都會(huì)插件測(cè)試用例類,執(zhí)行完成后,如果其實(shí)現(xiàn)了IDispose接口,則會(huì)調(diào)用Dispose函數(shù),更加簡(jiǎn)潔明了。也就是說(shuō):
在測(cè)試用例類的構(gòu)造函數(shù)指向數(shù)據(jù)構(gòu)建操作
在Dispose函數(shù)中指向數(shù)據(jù)清理操作
異常測(cè)試
Xunit并不是通過(guò)Attribute來(lái)標(biāo)記異常捕獲的,而是直接使用Assert.Throws斷言函數(shù)來(lái)驗(yàn)證異常。
public class TestClass1
{
[Fact]
public void testException()
{
Assert.Throws<InvalidOperationException>(() => operation());
}
void operation()
{
throw new InvalidOperationException();
}
}更改測(cè)試用例名稱:
[Fact(DisplayName =?"Max函數(shù)測(cè)試")]
跳過(guò)測(cè)試用例:
[Fact(Skip ="重構(gòu)未完成")]
分組:
[Trait("Group",?"Category")]
到此這篇關(guān)于.Net使用Xunit工具進(jìn)行單元測(cè)試的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Asp.net Socket客戶端(遠(yuǎn)程發(fā)送和接收數(shù)據(jù))
通過(guò)Socket遠(yuǎn)程發(fā)送與接收數(shù)據(jù)的代碼類2008-11-11
ASP.NET(C#) Web Api通過(guò)文件流下載文件的實(shí)例
這篇文章主要介紹了ASP.NET(C#) Web Api通過(guò)文件流下載文件的方法,提供源碼下載,需要的朋友可以參考下。2016-06-06
asp.net下gridview 批量刪除的實(shí)現(xiàn)方法
asp.net下gridview 批量刪除的實(shí)現(xiàn)方法...2007-11-11
ASP.NET?MVC5網(wǎng)站開發(fā)顯示文章列表(九)
顯示文章列表分兩塊,管理員可以顯示全部文章列表,一般用戶只顯示自己的文章列表。文章列表的顯示采用easyui-datagrid,后臺(tái)需要與之對(duì)應(yīng)的action返回json類型數(shù)據(jù),感興趣的小伙伴們可以參考一下2015-09-09
ASP.NET Core 奇技淫巧之接口代理轉(zhuǎn)發(fā)的實(shí)現(xiàn)
這篇文章主要介紹了ASP.NET Core 奇技淫巧之接口代理轉(zhuǎn)發(fā)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
ASP.NET簡(jiǎn)化編輯界面解決思路及實(shí)現(xiàn)代碼(2)
這篇與前一篇改進(jìn)部分,也許大家會(huì)留意到動(dòng)畫演示,主要是GridVeiw的更新與刪除會(huì)在每row都有。因此Insus.NET把它抽取出來(lái),放在GridView外,感興趣的朋友可以了解下啊,希望本文對(duì)你有所幫助2013-01-01
使用HtmlAgilityPack XPath 表達(dá)式抓取博客園數(shù)據(jù)的實(shí)現(xiàn)代碼
使用HtmlAgilityPack XPath表達(dá)式來(lái)抓取博客園數(shù)據(jù)使用WebClient 下載數(shù)據(jù),HtmlAgilityPack XPath表達(dá)式解析數(shù)據(jù),并綁定到Repeater控件2011-12-12
.NET性能調(diào)優(yōu)之一:ANTS Performance Profiler的使用介紹
本系列文章主要會(huì)介紹一些.NET性能調(diào)優(yōu)的工具、Web性能優(yōu)化的規(guī)則(如YSlow)及方法等等內(nèi)容。成文前最不希望看到的就是園子里不間斷的“哪個(gè)語(yǔ)言好,哪個(gè)語(yǔ)言性能高”的爭(zhēng)論,不多說(shuō),真正的明白人都應(yīng)該知道這樣的爭(zhēng)論有沒(méi)有意義,希望我們能從實(shí)際性能優(yōu)化的角度去討論問(wèn)題2013-01-01
給Asp.Net初學(xué)者的關(guān)于繼承和多態(tài)性的例子
給Asp.Net初學(xué)者的關(guān)于繼承和多態(tài)性的例子...2006-09-09

