Asp.Net Core利用文件監(jiān)視進(jìn)行快速測(cè)試開(kāi)發(fā)詳解
前言
在進(jìn)行 Asp.Net Core 應(yīng)用程序開(kāi)發(fā)過(guò)程中,通常的做法是先把業(yè)務(wù)代碼開(kāi)發(fā)完成,然后建立單元測(cè)試,最后進(jìn)入本地系統(tǒng)集成測(cè)試;在這個(gè)過(guò)程中,程序員的大部分時(shí)間幾乎都花費(fèi)在開(kāi)發(fā)、運(yùn)行、調(diào)試上,而且一再的重復(fù)這個(gè)過(guò)程,我稱這個(gè)過(guò)程為“程序員開(kāi)發(fā)螺旋”,并且在這個(gè)步驟中,重復(fù)率最高且沒(méi)有創(chuàng)造力的工作就是啟動(dòng)、測(cè)試,作為程序員,努力提高生產(chǎn)力我們追求的目標(biāo),我們的工作就是盡量消滅重復(fù)勞動(dòng),解放生產(chǎn)力,提高產(chǎn)出效率;
下面就通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)演示,如何通過(guò)文件監(jiān)視進(jìn)行快速開(kāi)發(fā)。
本示例將會(huì)使用兩個(gè)項(xiàng)目用作演示,如下圖
1. 建立業(yè)務(wù)項(xiàng)目 UserCenterDemo
1.1 在 UserCenterDemo.HomeController 里面編寫(xiě)一個(gè)簡(jiǎn)單的業(yè)務(wù)方法
[Route("api/[controller]")] [ApiController] public class HomeController : ControllerBase { [HttpGet("{id}")] public IActionResult Get(int id) { int code = 0; string userName = string.Empty; switch (id)
該業(yè)務(wù)方法非常簡(jiǎn)單,僅根據(jù)傳入的 id 值進(jìn)行判斷,如果不是 100 則返回 code=403
2. 建立 xUnit 單元測(cè)試項(xiàng)目 UserCenterDemoTest
2.1 引用項(xiàng)目 UserCenterDemo 和引用 NuGet 包
Microsoft.AspNetCore.App Microsoft.AspNetCore.TestHost
UserCenterDemo 使用了主機(jī)集成測(cè)試方式,對(duì)主機(jī)集成測(cè)試不了解到同學(xué),可以查看我上一篇博客: Asp.Net Core 輕松學(xué)-利用xUnit進(jìn)行主機(jī)級(jí)別的網(wǎng)絡(luò)集成測(cè)試.
2.2 編寫(xiě)測(cè)試用例 UserCenterDemoTest.HomeControllerTest.cs
public class HomeControllerTest { public static TestServer serverHost; public static HttpClient client; public HomeControllerTest() { if (serverHost == null) { serverHost = new TestServer(new WebHostBuilder().UseStartup<UserCenterDemo.Startup>()); client = serverHost.CreateClient();
該測(cè)試包含兩個(gè)測(cè)試方法,分別是獲取 id=100 的用戶和 id=0 的 Guest 用戶
3. 使用 dotnet watch 進(jìn)行監(jiān)視測(cè)試
按照以往的開(kāi)發(fā)習(xí)慣,我們現(xiàn)在應(yīng)該做的事情可能有兩個(gè),一是啟動(dòng)項(xiàng)目使用瀏覽器進(jìn)行訪問(wèn)業(yè)務(wù)接口 Get ,二是運(yùn)行單元測(cè)試,不管怎么樣,這兩個(gè)動(dòng)作都將消耗我們大量的時(shí)間
現(xiàn)在,有一種全新的選擇,我們可以通過(guò)使用 dotnet watch test 對(duì)項(xiàng)目文件進(jìn)行監(jiān)視變動(dòng),自動(dòng)運(yùn)行單元測(cè)試,并將測(cè)試結(jié)果輸出到控制臺(tái)
3.1 打開(kāi) cmd.exe 程序,切換到測(cè)試項(xiàng)目目錄 UserCenterDemoTest,輸入 dotnet watch test,等待運(yùn)行
上圖表示,當(dāng)我們輸入命令 dotnet watch test 后,監(jiān)視程序正在啟動(dòng),并在啟動(dòng)完成后立即執(zhí)行了一次單元測(cè)試,紅色方框部分表示有 2 個(gè)測(cè)試用例已通過(guò),然后程序并沒(méi)有退出,而是在最后輸出了一個(gè)提示,正在等待文件變動(dòng)以重啟 dotnet 應(yīng)用程序
3.2 接下來(lái)我們修改測(cè)試用例 GetGuestTest 的斷言結(jié)果 code=0,看看發(fā)生了什么
可以看到,在修改完成保存文件的瞬間,程序立即重啟生成,然后執(zhí)行測(cè)試,測(cè)試結(jié)果斷言不通過(guò)
那么問(wèn)題來(lái)了,上面只是監(jiān)視了測(cè)試項(xiàng)目,如果我們修改了 UserCenterDemo.Controllers ,能夠自動(dòng)監(jiān)視嗎,答案是肯定的
3.3 現(xiàn)在修改 UserCenterDemo.Controllers ,修改獲取 Guest 的 code=0,返回成功
[Route("api/[controller]")] [ApiController] public class HomeController : ControllerBase { [HttpGet("{id}")] public IActionResult Get(int id) { int code = 0; string userName = string.Empty; switch (id)
輸出結(jié)果,已自動(dòng)監(jiān)視執(zhí)行
為什么會(huì)這樣呢,因?yàn)槲覀兊臏y(cè)試項(xiàng)目引用了業(yè)務(wù)項(xiàng)目 UserCenterDemo
所以可以監(jiān)視到,查看 UserCenterDemoTest.csproj 文件,起作用的是以下代碼
<ItemGroup> <ProjectReference Include="..\UserCenterDemo\UserCenterDemo.csproj" /> </ItemGroup>
5. 擴(kuò)展使用
5.1 如果你覺(jué)得總是不停的輸出各種信息讓你覺(jué)得很不友好,那么你可以排除監(jiān)視,比如移除對(duì) UserCenterDemo.csproj 的監(jiān)視,只需要增加配置 Watch="false" 即可
<ItemGroup> <ProjectReference Include="..\UserCenterDemo\UserCenterDemo.csproj" Watch="false"/> </ItemGroup>
5.2 獨(dú)立監(jiān)視
當(dāng)項(xiàng)目比較大的時(shí)候,我們可能需要對(duì)監(jiān)視項(xiàng)目進(jìn)行管理,這個(gè)時(shí)候再逐一的對(duì)每個(gè)項(xiàng)目進(jìn)行監(jiān)視設(shè)置就變得非常的麻煩,然后我們就可以建立一個(gè)單獨(dú)的文件夾,創(chuàng)建一個(gè) watch.csproj 文件,填如下面的內(nèi)容
<Project> <ItemGroup> <TestProjects Include="..\**\*.csproj" /> <Watch Include="..\**\*.cs" /> </ItemGroup> <Target Name="WatchManage"> <MSBuild Targets="VSTest" Projects="@(TestProjects)" /> </Target>
5.3 注意路徑,因?yàn)楸臼纠哪夸浗Y(jié)構(gòu)是這樣
所以文件中的監(jiān)視節(jié)點(diǎn)我必須加入 .. 回退到上一級(jí),上面的代碼表示,監(jiān)視上一級(jí)目錄下的 .csproj/.cs 文件變動(dòng),并為本次監(jiān)視管理命名為:WatchManage
5.4 現(xiàn)在進(jìn)入目錄 watch 輸入命令 dotnet watch msbuild /t:WatchManager
可以看到,已經(jīng)成功對(duì)兩個(gè)項(xiàng)目進(jìn)行變動(dòng)監(jiān)視
- 通過(guò)本示例,我們了解到如何在項(xiàng)目開(kāi)發(fā)過(guò)程中減少重復(fù)勞動(dòng),提高生產(chǎn)力的方法
- 學(xué)習(xí)了 dotnet watch test 的使用方法
- 掌握了在應(yīng)對(duì)項(xiàng)目繁多的時(shí)候,建立獨(dú)立文件監(jiān)視管理器的方法
示例代碼下載:http://xiazai.jb51.net/201812/yuanma/UserCenterDemo_jb51.rar
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- .Net Core3 用Windows 桌面應(yīng)用開(kāi)發(fā)Asp.Net Core網(wǎng)站
- ASP.NET Core應(yīng)用錯(cuò)誤處理之DeveloperExceptionPageMiddleware中間件呈現(xiàn)“開(kāi)發(fā)者異常頁(yè)面”
- ASP.NET Core開(kāi)發(fā)教程之Logging利用NLog寫(xiě)日志文件
- ASP.NET Core優(yōu)雅的在開(kāi)發(fā)環(huán)境保存機(jī)密(User Secrets)
- Visual Studio 2017 ASP.NET Core開(kāi)發(fā)
- VS2015 搭建Asp.net core開(kāi)發(fā)環(huán)境的方法
- [Asp.Net Core]提高開(kāi)發(fā)效率的方法
相關(guān)文章
.net中string無(wú)重復(fù)數(shù)字的實(shí)現(xiàn)方法
今天做項(xiàng)目的時(shí)候,用js獲得了勾選的checkbox放在了hiddenfile里,然而hiddenfile的值變成了類似:“1,1,1,3,3,2,4,5,5,5”,后臺(tái)獲取的時(shí)候,只保留不重復(fù)的數(shù)字,于是想了一想;直接上代碼了。2013-04-04微軟發(fā)布的Data Access Application Block的使用代碼
微軟發(fā)布的Data Access Application Block的使用代碼...2007-04-04ASP.NET MVC中使用log4net的實(shí)現(xiàn)示例
這篇文章主要介紹了ASP.NET MVC中使用log4net的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01ASP.NET Core開(kāi)發(fā)教程之Logging利用NLog寫(xiě)日志文件
一直很喜歡 NLog 的簡(jiǎn)潔和擴(kuò)展性,所以下面這篇文章主要給大家介紹了關(guān)于ASP.NET Core開(kāi)發(fā)教程之Logging利用NLog寫(xiě)日志文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-07-07C#反射技術(shù)的簡(jiǎn)單操作(讀取和設(shè)置類的屬性)
反射的作用想必大家都知道了吧,少量屬性的自動(dòng)化操作手動(dòng)添加幾下當(dāng)然是沒(méi)有問(wèn)題的,但是屬性數(shù)量較多的時(shí)候敲起這些繁鎖的代碼可以困了,再說(shuō)對(duì)擴(kuò)展和維護(hù)性造成很多的不遍,以下代碼中如不能直接使用請(qǐng)?zhí)砑觰sing System.Text;的引用。2011-01-01asp.net用url重寫(xiě)URLReWriter實(shí)現(xiàn)任意二級(jí)域名 高級(jí)篇
Asp.net 用url重寫(xiě)(URLReWriter)實(shí)現(xiàn)任意二級(jí)域名,需要的朋友可以參考下,建議先看一下上一篇文章。2009-11-11.NetCore?Web?Api?利用ActionFilterAttribute統(tǒng)一接口返回值格式及問(wèn)題解析
在實(shí)際項(xiàng)目開(kāi)發(fā)過(guò)程中,統(tǒng)一API返回值格式對(duì)前端或第三方調(diào)用將是非常必要的,在.NetCore中我們可以通過(guò)ActionFilterAttribute來(lái)進(jìn)行統(tǒng)一返回值的封裝,對(duì).NetCore?Web?Api?統(tǒng)一接口返回值格式相關(guān)知識(shí)感興趣的朋友一起看看吧2022-03-03