ASP.NET Core中使用xUnit進(jìn)行單元測(cè)試
單元測(cè)試的功能自從MVC的第一個(gè)版本誕生的時(shí)候,就是作為一個(gè)重要的賣(mài)點(diǎn)來(lái)介紹的,通常在拿MVC與webform比較的時(shí)候,單元測(cè)試就是必殺底牌,把webform碾壓得一無(wú)是處。
單元測(cè)試的重要性不用多說(shuō)了,有單元測(cè)試的做兜底的項(xiàng)目,好比給開(kāi)發(fā)人員買(mǎi)了份保險(xiǎn),當(dāng)然這個(gè)保險(xiǎn)的質(zhì)量取決于單元測(cè)試的質(zhì)量,那些一路Mock的單元測(cè)試,看起來(lái)很美,但是什么都cover不到。目前工作中的一個(gè)老項(xiàng)目,有2萬(wàn)多個(gè)單元測(cè)試用例,其中不少是用心之作,真正落實(shí)到了業(yè)務(wù)邏輯,開(kāi)發(fā)人員可以放心的去修改代碼,當(dāng)然一切都必須按照TDD的原則來(lái)進(jìn)行,具體就不詳細(xì)說(shuō)了。
接下來(lái)進(jìn)入正題,單元測(cè)試這個(gè)重要的基礎(chǔ)功能,在.NET Core中當(dāng)然不能少,相關(guān)的API和組件提供的功能跟之前的版本沒(méi)什么大的區(qū)別,主要在于需要對(duì).NET Core的支持,說(shuō)白了就是之前在.NET Framework平臺(tái)下的代碼,得重新生成支持.NET Core。比如本文要說(shuō)到的xUnit,xUnit已經(jīng)提供了對(duì).NET Core的支持版本,下面我們來(lái)看看如何在ASP.NET Core中使用xUnit進(jìn)行單元測(cè)試。
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]
- 類似于Aspect的功能
- 減少了自定義屬性(Attribute)的數(shù)目
- 采用泛型
- 匿名委托
- 可擴(kuò)展的斷言
- 可擴(kuò)展的測(cè)試方法
- 可擴(kuò)展的測(cè)試類
xUnit.net的官方網(wǎng)站是:http://xunit.codeplex.com,下面是xUnit.net的運(yùn)行界面:
注意在下載的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。
準(zhǔn)備項(xiàng)目代碼:
1.創(chuàng)建一個(gè)空白的ASP.NET Core web項(xiàng)目,命名為UseXunit。
2.然后修改project.json的內(nèi)容如下,在dependencies的最后一行加入對(duì)MVC組件的依賴
"Microsoft.AspNetCore.Mvc": "1.0.1"
3.修改Startup.cs文件
在ConfigureServices方法加入services.AddMvc();
在Configure方法加入app.UseMvcWithDefaultRoute();
3.然后在項(xiàng)目根目錄新建一個(gè)Controllers目錄,并添加一個(gè)HomeController,代碼如下
public class HomeController : Controller { public IActionResult Index() { return Content("Hello test"); } }
4.到這里項(xiàng)目應(yīng)該能跑起來(lái)了,運(yùn)行后能看到輸出Hello test,說(shuō)明一個(gè)簡(jiǎn)單的項(xiàng)目已具備了。
加入單元測(cè)試項(xiàng)目
接下來(lái)加入單元測(cè)試項(xiàng)目,獨(dú)立一個(gè)測(cè)試項(xiàng)目方便管理。
1.右鍵解決方案文件,然后選擇新建一個(gè)解決方案文件夾,然后命名為test
2.在test目錄下新建一個(gè).NET Core項(xiàng)目,這里選擇的項(xiàng)目類型是Class Library(.NET Core),命名項(xiàng)目名為UseXunit.Tests
3.然后修改Tests項(xiàng)目的project.json內(nèi)容為如下
{ "version": "1.0.0-*", "testRunner": "xunit", "dependencies": { "Microsoft.NETCore.App": { "type": "platform", "version": "1.0.0" }, "xunit": "2.1.0", "dotnet-test-xunit": "2.2.0-preview2-build1029", "UseXunit": "1.0.0", "Microsoft.AspNetCore.Mvc": "1.0.1" }, "frameworks": { "netcoreapp1.0": { "imports": [ "dotnet5.6", "portable-net45+win8" ] } } }
這里的改動(dòng)幾乎重寫(xiě)了系統(tǒng)默認(rèn)生成的配置,系統(tǒng)默認(rèn)的配置幾乎跑不起來(lái),需要重新設(shè)置。
dependencies引入了xunit,以及dotnet-test-xunit的運(yùn)行支持package,當(dāng)然也加入了對(duì)待測(cè)試項(xiàng)目的依賴(UseXunit)。
另外一個(gè)關(guān)鍵配置是指定了testrunner為xunit
保存之后會(huì)自動(dòng)restore相關(guān)的packages。
4.現(xiàn)在可以開(kāi)始創(chuàng)建TestCase
新建一個(gè)HomeControllerTest類,內(nèi)容如下
public class HomeControllerTest { [Fact] public void ShouldGetIndexResult() { var homeController = new HomeController(); var contentResult = homeController.Index() as ContentResult; Assert.NotNull(contentResult); Assert.Equal("Hello test", contentResult.Content); } }
這里就創(chuàng)建了一個(gè)基本的測(cè)試用例,然后使用你熟悉的快捷鍵Ctrl+U+R(Reshaper)就可以將test愉快地運(yùn)行起來(lái)了
完整代碼請(qǐng)參考 https://github.com/shenba2014/AspDotNetCoreMvcExamples/tree/master/UseXunit
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- .NET Core單元測(cè)試的兩種方法介紹
- ASP.NET?Core項(xiàng)目使用xUnit進(jìn)行單元測(cè)試
- 淺談.Net Core后端單元測(cè)試的實(shí)現(xiàn)
- ASP.NET Core對(duì)Controller進(jìn)行單元測(cè)試的完整步驟
- xUnit 編寫(xiě) ASP.NET Core 單元測(cè)試的方法
- ASP.NET Core針對(duì)一個(gè)使用HttpClient對(duì)象的類編寫(xiě)單元測(cè)試詳解
- 詳解.Net單元測(cè)試方法
- .NET單元測(cè)試使用AutoFixture按需填充的幾種方式和最佳實(shí)踐記錄
相關(guān)文章
asp.net實(shí)現(xiàn)識(shí)別客戶端瀏覽器或操作系統(tǒng)
這里給大家匯總了使用asp.net實(shí)現(xiàn)識(shí)別客戶端瀏覽器或操作系統(tǒng)的方法和示例代碼,有需要的小伙伴可以參考下。2015-10-10Aspnetpager對(duì)GridView分頁(yè)并順利導(dǎo)出Excel
這篇文章主要介紹了Aspnetpager對(duì)GridView分頁(yè)并順利導(dǎo)出Excel的相關(guān)資料,需要的朋友可以參考下2016-04-04asp.net實(shí)現(xiàn)XML文件讀取數(shù)據(jù)綁定到DropDownList的方法
這篇文章主要介紹了asp.net實(shí)現(xiàn)XML文件讀取數(shù)據(jù)綁定到DropDownList的方法,結(jié)合實(shí)例形式分析了asp.net針對(duì)xml文件操作及DropDownList控件的使用技巧,需要的朋友可以參考下2017-02-02ASP.NET The system cannot find the file specified解決辦法
這篇文章主要介紹了ASP.NET The system cannot find the file specified解決辦法的相關(guān)資料,需要的朋友可以參考下2016-11-11ASP.NET WebService中使用ASP.NET_SessionId的問(wèn)題說(shuō)明
proxy.CookieContainer存儲(chǔ)了客戶端的 ASP.NET_SessionId。這樣以后每次通過(guò)webservice 方法調(diào)用時(shí),都會(huì)將ASP.NET_SessionId傳遞到服務(wù)器端。2011-09-09深入理解Asp.net中DataBinder.Eval的用法總結(jié)
本篇文章是對(duì)Asp.net中DataBinder.Eval的用法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06asp.net中的check與uncheck關(guān)鍵字用法解析
這篇文章主要介紹了asp.net中的check與uncheck關(guān)鍵字用法,以實(shí)例形式較為詳細(xì)的分析了check與uncheck關(guān)鍵字的各種常見(jiàn)用法與使用時(shí)的注意事項(xiàng),非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-10-10