亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

asp.net core 使用 TestServer 來做集成測試的方法

 更新時(shí)間:2020年11月20日 09:27:16   作者:Love it or leave it  
這篇文章主要介紹了asp.net core 使用 TestServer 來做集成測試,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

Intro

之前我的項(xiàng)目里的集成測試是隨機(jī)一個(gè)端口,每次都真實(shí)的啟動(dòng)一個(gè) WebServer,之前也有看到過微軟文檔上 TestServer 的介紹,當(dāng)時(shí)沒仔細(xì)看過以為差不多就沒用,一直是啟動(dòng)了一個(gè)真正的 WebServer 去跑集成測試的,上次分享 Xunit.DependencyInjection 改造測試項(xiàng)目的時(shí)候,寫的爛代碼被大師看到了之后, 大師建議用 TestServer 來做集成測試,使用 TestServer 不會(huì)真正的占用端口號,不會(huì)出現(xiàn)權(quán)限問題,于是扒了扒 TestServer 的源碼,并用 TestServer 改進(jìn)了集成測試項(xiàng)目,感謝大師[獻(xiàn)花鮮花]~~

Sample

之前的集成測試監(jiān)聽了一個(gè)端口號,使用了一個(gè)真實(shí)的 WebServer,下面改成使用 TestServer

TestServer 現(xiàn)在是在 Microsoft.AspNetCore.TestHost 這個(gè) Nuget 包中,引用這個(gè)包就可以使用了

在服務(wù)注冊的時(shí)候調(diào)用 UseTestServer 這一擴(kuò)展方法就可以注入 TestServer 了,集成測試一般會(huì)用 HttpClient 來請求服務(wù)器端的 API 地址或頁面,TestServer 提供了一個(gè)方便的 CreateClient 的方法可以很方便的創(chuàng)建一個(gè)用來請求 TestServerHttpClient,微軟也提供了一些比較方便的擴(kuò)展方法,可以使用 IHostGetTestClient 擴(kuò)展方法來獲取 HttpClient

改成使用 TestServer 很簡單,引用 nuget 包 Microsoft.AspNetCore.TestHost,變更對比如下:

源碼概覽

TestServer 在啟動(dòng)的時(shí)候并沒有監(jiān)聽端口,可以參考源碼 IServerStart

TestServer 通過 CreateClient 方法來創(chuàng)建調(diào)用 TestServer 接口的 HttpClient

通過上面的代碼可以看的出來核心代碼是在 ClientHandler 中定義的,源碼有點(diǎn)多,詳細(xì)可以直接看源碼 https://github.com/dotnet/aspnetcore/blob/v5.0.0/src/Hosting/TestHost/src/ClientHandler.cs

ClientHandler 重寫了 HttpClientHandler 的 SendAsync 方法,使得請求直接攔截掉,不會(huì)真正的發(fā)生 Http 請求,實(shí)際的請求過程首先將 Http 請求的信息轉(zhuǎn)換成 HttpRquestFeature 然后直接交給 TestServer 處理,其實(shí)也就是直接交給 asp.net core 的請求管道去處理,請求處理結(jié)束之后,獲取 HttpContext 響應(yīng),獲取 HttpResponseFeature 然后轉(zhuǎn)換成 HttpClient 需要的 HttpResponseMessage.

More

TestServer 不僅僅可以支持 HTTP 請求的處理,還支持 WebSocket 的處理,WebSocket 的集成測試也可以使用 TestServer 來處理。

你如果還是比較懷疑是否真的沒有 HTTP 請求,可以用 Fildder 之類的 HTTP 抓包工具監(jiān)控在跑測試的期間是否真的有 HTTP 請求,如果是真正的 WebServer 會(huì)有 HTTP 請求,TestServer 不會(huì)有 HTTP 請求。

https://docs.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-5.0
https://github.com/dotnet/aspnetcore/tree/v5.0.0/src/Hosting/TestHost/src
https://github.com/dotnet/aspnetcore/tree/v5.0.0/src/Hosting/TestHost/src/TestServer.cs
https://github.com/dotnet/aspnetcore/blob/v5.0.0/src/Hosting/TestHost/src/ClientHandler.cs#L58
https://github.com/OpenReservation/ReservationServer/blob/3.1.0/OpenReservation.API.Test/Startup.cs#L26
https://github.com/OpenReservation/ReservationServer/commit/e683065bf76e3c51688238c382b2c1f0c8028e7d

到此這篇關(guān)于asp.net core 使用 TestServer 來做集成測試的文章就介紹到這了,更多相關(guān)asp.net core 集成測試內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論