Asp.Net Core利用文件監(jiān)視進行快速測試開發(fā)詳解
前言
在進行 Asp.Net Core 應(yīng)用程序開發(fā)過程中,通常的做法是先把業(yè)務(wù)代碼開發(fā)完成,然后建立單元測試,最后進入本地系統(tǒng)集成測試;在這個過程中,程序員的大部分時間幾乎都花費在開發(fā)、運行、調(diào)試上,而且一再的重復(fù)這個過程,我稱這個過程為“程序員開發(fā)螺旋”,并且在這個步驟中,重復(fù)率最高且沒有創(chuàng)造力的工作就是啟動、測試,作為程序員,努力提高生產(chǎn)力我們追求的目標(biāo),我們的工作就是盡量消滅重復(fù)勞動,解放生產(chǎn)力,提高產(chǎn)出效率;
下面就通過一個簡單的例子來演示,如何通過文件監(jiān)視進行快速開發(fā)。
本示例將會使用兩個項目用作演示,如下圖

1. 建立業(yè)務(wù)項目 UserCenterDemo
1.1 在 UserCenterDemo.HomeController 里面編寫一個簡單的業(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ù)方法非常簡單,僅根據(jù)傳入的 id 值進行判斷,如果不是 100 則返回 code=403
2. 建立 xUnit 單元測試項目 UserCenterDemoTest
2.1 引用項目 UserCenterDemo 和引用 NuGet 包
Microsoft.AspNetCore.App Microsoft.AspNetCore.TestHost
UserCenterDemo 使用了主機集成測試方式,對主機集成測試不了解到同學(xué),可以查看我上一篇博客: Asp.Net Core 輕松學(xué)-利用xUnit進行主機級別的網(wǎng)絡(luò)集成測試.
2.2 編寫測試用例 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();
該測試包含兩個測試方法,分別是獲取 id=100 的用戶和 id=0 的 Guest 用戶
3. 使用 dotnet watch 進行監(jiān)視測試
按照以往的開發(fā)習(xí)慣,我們現(xiàn)在應(yīng)該做的事情可能有兩個,一是啟動項目使用瀏覽器進行訪問業(yè)務(wù)接口 Get ,二是運行單元測試,不管怎么樣,這兩個動作都將消耗我們大量的時間
現(xiàn)在,有一種全新的選擇,我們可以通過使用 dotnet watch test 對項目文件進行監(jiān)視變動,自動運行單元測試,并將測試結(jié)果輸出到控制臺
3.1 打開 cmd.exe 程序,切換到測試項目目錄 UserCenterDemoTest,輸入 dotnet watch test,等待運行

上圖表示,當(dāng)我們輸入命令 dotnet watch test 后,監(jiān)視程序正在啟動,并在啟動完成后立即執(zhí)行了一次單元測試,紅色方框部分表示有 2 個測試用例已通過,然后程序并沒有退出,而是在最后輸出了一個提示,正在等待文件變動以重啟 dotnet 應(yīng)用程序
3.2 接下來我們修改測試用例 GetGuestTest 的斷言結(jié)果 code=0,看看發(fā)生了什么

可以看到,在修改完成保存文件的瞬間,程序立即重啟生成,然后執(zhí)行測試,測試結(jié)果斷言不通過
那么問題來了,上面只是監(jiān)視了測試項目,如果我們修改了 UserCenterDemo.Controllers ,能夠自動監(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é)果,已自動監(jiān)視執(zhí)行

為什么會這樣呢,因為我們的測試項目引用了業(yè)務(wù)項目 UserCenterDemo
所以可以監(jiān)視到,查看 UserCenterDemoTest.csproj 文件,起作用的是以下代碼
<ItemGroup> <ProjectReference Include="..\UserCenterDemo\UserCenterDemo.csproj" /> </ItemGroup>
5. 擴展使用
5.1 如果你覺得總是不停的輸出各種信息讓你覺得很不友好,那么你可以排除監(jiān)視,比如移除對 UserCenterDemo.csproj 的監(jiān)視,只需要增加配置 Watch="false" 即可
<ItemGroup> <ProjectReference Include="..\UserCenterDemo\UserCenterDemo.csproj" Watch="false"/> </ItemGroup>
5.2 獨立監(jiān)視
當(dāng)項目比較大的時候,我們可能需要對監(jiān)視項目進行管理,這個時候再逐一的對每個項目進行監(jiān)視設(shè)置就變得非常的麻煩,然后我們就可以建立一個單獨的文件夾,創(chuàng)建一個 watch.csproj 文件,填如下面的內(nèi)容
<Project> <ItemGroup> <TestProjects Include="..\**\*.csproj" /> <Watch Include="..\**\*.cs" /> </ItemGroup> <Target Name="WatchManage"> <MSBuild Targets="VSTest" Projects="@(TestProjects)" /> </Target>
5.3 注意路徑,因為本示例的目錄結(jié)構(gòu)是這樣

所以文件中的監(jiān)視節(jié)點我必須加入 .. 回退到上一級,上面的代碼表示,監(jiān)視上一級目錄下的 .csproj/.cs 文件變動,并為本次監(jiān)視管理命名為:WatchManage
5.4 現(xiàn)在進入目錄 watch 輸入命令 dotnet watch msbuild /t:WatchManager

可以看到,已經(jīng)成功對兩個項目進行變動監(jiān)視
- 通過本示例,我們了解到如何在項目開發(fā)過程中減少重復(fù)勞動,提高生產(chǎn)力的方法
- 學(xué)習(xí)了 dotnet watch test 的使用方法
- 掌握了在應(yīng)對項目繁多的時候,建立獨立文件監(jiān)視管理器的方法
示例代碼下載:http://xiazai.jb51.net/201812/yuanma/UserCenterDemo_jb51.rar
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- .Net Core3 用Windows 桌面應(yīng)用開發(fā)Asp.Net Core網(wǎng)站
- ASP.NET Core應(yīng)用錯誤處理之DeveloperExceptionPageMiddleware中間件呈現(xiàn)“開發(fā)者異常頁面”
- ASP.NET Core開發(fā)教程之Logging利用NLog寫日志文件
- ASP.NET Core優(yōu)雅的在開發(fā)環(huán)境保存機密(User Secrets)
- Visual Studio 2017 ASP.NET Core開發(fā)
- VS2015 搭建Asp.net core開發(fā)環(huán)境的方法
- [Asp.Net Core]提高開發(fā)效率的方法
相關(guān)文章
MongoDB.Net工具庫MongoRepository使用方法詳解
這篇文章主要為大家詳細(xì)介紹了MongoDB.Net工具庫MongoRepository的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
asp.net下將純真IP數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫中的代碼
純真IP數(shù)據(jù)庫包含最新的IP信息,通過IP我們可以查詢訪問者的來路,地理位置!但下載下來的IP數(shù)據(jù)無法被我們直接調(diào)用,所以我們需要編寫代碼將IP寫入到數(shù)據(jù)庫中供我們使用!2011-01-01
asp.net c#采集需要登錄頁面的實現(xiàn)原理及代碼
當(dāng)我們采集頁面的時候,如果被采集的網(wǎng)站需要登錄才能采集,原理搞清楚了,就好辦了,我們所要做的僅僅是在采集的時候(或者說HttpWebRequest提交數(shù)據(jù)的時候),將Cookie信息放入Http請求頭里面就可以了,感興趣的朋友可以了解下,或許對你有所幫助2013-02-02
一文輕松了解ASP.NET與ASP.NET?Core多環(huán)境配置對比
ASP.NET?Core支持在多個環(huán)境中管理應(yīng)用程序,如開發(fā)(Development),預(yù)演(Staging)和生產(chǎn)(Production),下面這篇文章主要給大家介紹了關(guān)于ASP.NET與ASP.NET?Core多環(huán)境配置對比?的相關(guān)資料,需要的朋友可以參考下2022-04-04
安裝.NET Framework進度條卡住不動的解決方案(推薦)
VS在安裝之前需要安裝.NET Framework,我安裝的是4.0版本。但是安裝進度條到一半左右時就卡住不動了。前前后后重試多次,還有幾次重新開機,但都沒用,怎么解決呢,下面給大家分享下解決方案2016-12-12
Asp.net簡單代碼設(shè)置GridView自適應(yīng)列寬不變形實現(xiàn)思路與代碼
動態(tài)綁定的GridView由于列數(shù)不固定,而列又太多(博主做的這個項目有150個左右的字段),這樣設(shè)置GridView固定寬度就不能滿足需求了2013-01-01

