.Net使用Xunit工具進(jìn)行單元測(cè)試
不管你愛(ài)與不愛(ài),單元測(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的)
編寫(xiě)測(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之類(lèi)Attribute來(lái)標(biāo)記測(cè)試用例類(lèi),只需要滿足如下條件即可:
測(cè)試類(lèi)必須是public的
測(cè)試用例用FactAttribute標(biāo)記
斷言:
Assert類(lèi)用來(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適配不是很好,我這里寫(xiě)了一個(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è)試用例類(lèi),執(zhí)行完成后,如果其實(shí)現(xiàn)了IDispose接口,則會(huì)調(diào)用Dispose函數(shù),更加簡(jiǎn)潔明了。也就是說(shuō):
在測(cè)試用例類(lèi)的構(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(C#)中采用自定義標(biāo)簽和XML、XSL顯示數(shù)據(jù)
在asp.net(C#)中采用自定義標(biāo)簽和XML、XSL顯示數(shù)據(jù)的實(shí)現(xiàn)代碼。2009-06-06asp.net下xml當(dāng)作導(dǎo)航數(shù)據(jù)源實(shí)現(xiàn)動(dòng)態(tài)權(quán)限
如果有權(quán)限的話 可以通過(guò)節(jié)點(diǎn)的Roles屬性判斷當(dāng)前登陸的賬號(hào)角色名是否符合然后判斷輸出這樣的話您就可以直接操作XML數(shù)據(jù) 而不用考慮別的。2009-12-12ASP.NET MVC中使用JavaScriptResult的用法示例
這篇文章主要介紹了ASP.NET MVC中使用JavaScriptResult的用法,結(jié)合實(shí)例形式分析了采用javascript動(dòng)態(tài)設(shè)置標(biāo)簽樣式以及使用MVC中的JavaScriptResult來(lái)實(shí)現(xiàn)同樣效果的相關(guān)技巧,需要的朋友可以參考下2016-08-08Asp.net MVC 中利用jquery datatables 實(shí)現(xiàn)數(shù)據(jù)分頁(yè)顯示功能
這篇文章主要介紹了Asp.net MVC 中利用jquery datatables 實(shí)現(xiàn)數(shù)據(jù)分頁(yè)顯示功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-06-06.Net Core下HTTP請(qǐng)求IHttpClientFactory示例詳解
這篇文章主要給大家介紹了關(guān)于.Net Core下HTTP請(qǐng)求IHttpClientFactory的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用.Net Core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09獲取根目錄的URL例如http://localhost:51898
這篇文章主要介紹了獲取根目錄的URL的方法,需要的朋友可以參考下2014-02-02ASPNET按鈕只執(zhí)行客戶端代碼不回送頁(yè)面實(shí)現(xiàn)思路
有些時(shí)候需要實(shí)現(xiàn)只執(zhí)行客戶端代碼不回送頁(yè)面,不過(guò)很多童鞋們不清楚如何實(shí)現(xiàn)呢,還好本文的出現(xiàn)將解決你的困擾,感興趣的朋友可以了解下,或許對(duì)你有所幫助2013-02-02.NET CORE中使用AutoMapper進(jìn)行對(duì)象映射的方法
這篇文章主要給大家介紹了關(guān)于.NET CORE中使用AutoMapper進(jìn)行對(duì)象映射的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用.NET CORE具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04WPF制作一個(gè)簡(jiǎn)單的倒計(jì)時(shí)器實(shí)例附源碼
既然早上沒(méi)事干,于是想到前些日子學(xué)院的某個(gè)老師讓大家給他找個(gè)什么倒計(jì)時(shí)的小軟件;何不寫(xiě)個(gè)玩玩~既然要寫(xiě),就用以前沒(méi)怎么搗鼓過(guò)的WPF寫(xiě)一個(gè)倒計(jì)時(shí)器,需要了解的朋友可以參考下2012-12-12