<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>


      系列目錄 <https://www.cnblogs.com/tylerzhou/p/11204826.html>

      從.net到.net core以后,微軟非常努力,以每年一到兩個(gè)大版本的頻率在演進(jìn).net core,去年相繼發(fā)布了.net core
      2.1和2.2,其中2.1是長期支持版,不斷的快速更新一方面快速彌補(bǔ)了相比.net
      framework缺失的api,同時(shí)也帶來了不少激進(jìn)性的改變,導(dǎo)致很多api,尤其是較傳統(tǒng)framework相比新增的api不斷調(diào)整,有些api在上一個(gè)版本還能用,結(jié)果到下一個(gè)版本就不支持了.升級(jí)到2.1以后,微軟就更改了集成測試服務(wù)器的包名并改變了2.0的接口,進(jìn)行了更高層次的封裝,降低了使用配置難度.但是截至寫本文時(shí)VisualStudio工具支持仍然不是太好,需要手動(dòng)修改csproj文件.但是這個(gè)工作也是一次性的.配置好了就ok啦.


      看到這里可能有些同志會(huì)擔(dān)心接口變化很大以前學(xué)的東西都白瞎了,其實(shí)不然,只是創(chuàng)建TestServer的方式變了,我們實(shí)際測試中用到的最多的是HttpClient這個(gè)對(duì)象,它并沒有變.

      下面就介紹一下.net core 2.1下如何搭建一個(gè)內(nèi)存集成測試服務(wù)器.
      首先我們新建一個(gè).net core 2.1的mvc項(xiàng)目,并創(chuàng)建一個(gè)Xunit單元測試項(xiàng)目,引用剛創(chuàng)建的這個(gè)mvc項(xiàng)目,關(guān)于創(chuàng)建跟前面一樣,這里不再贅述.

      下載以下兩個(gè)包:Microsoft.AspNetCore.App和Microsoft.AspNetCore.Mvc.Testing

      我們創(chuàng)建一個(gè)名為netcoremvc21的測試類,它的代碼如下
      public class netcoremvc21:
      IClassFixture<WebApplicationFactory<CoreMvc21.Startup>> { //private readonly
      WebApplicationFactory<CoreMvc21.Startup> _factory; private HttpClient client;
      public netcoremvc21(WebApplicationFactory<CoreMvc21.Startup> factory) {
      this.client = factory.CreateClient(); } [Fact] public async Task GetTest() {
      var response = await client.GetAsync("/Home/Hello");
      response.EnsureSuccessStatusCode(); var responseStr = await
      response.Content.ReadAsStringAsync(); Assert.Equal("Hello,world", responseStr);
      } } }
      我們創(chuàng)建的項(xiàng)目實(shí)現(xiàn)了IClassFixture泛型接口,前面我們講了這個(gè)接口的作用了,這里不再贅述,它里面的泛型參數(shù)是一個(gè)
      WebApplicationFactory
      泛型對(duì)象,這個(gè)對(duì)象是微軟提供好的,不需要我們自己創(chuàng)建,這個(gè)泛型對(duì)象的參數(shù)是一個(gè)TEntryPoint對(duì)象,其實(shí)就是指定程序的startup文件(這里我們提供的是mvc項(xiàng)目的startup文件,這個(gè)項(xiàng)目名為CoreMvc21).它其實(shí)是把創(chuàng)建內(nèi)存測試服務(wù)器的方法給封裝了,類似我們前面的封裝,減少了手寫代碼量,并且提供了最佳實(shí)踐,我們前面說到過,如果對(duì)Xunit不熟悉在構(gòu)造函數(shù)里創(chuàng)建非托管對(duì)象非造成嚴(yán)重性能問題.

      下面的測試代碼和前面的并沒太大區(qū)別,都是通過httpclient對(duì)象構(gòu)造請(qǐng)求.

      測試接口數(shù)據(jù)沒問題,我們?cè)賮砜纯催@次是沒有配置ContentRoot的,程序能不能正常找到頁面

      測試代碼如下
      [Fact] public async Task GetTest() { var response = await
      client.GetAsync("/Home/index"); response.EnsureSuccessStatusCode(); var
      responseStr = await response.Content.ReadAsStringAsync();
      Assert.Contains("myCarousel", responseStr); }

      以上代碼測試也是通過的,也就是我們不需要額外的配置,基本功能都能正常運(yùn)行了.當(dāng)前以上能正常運(yùn)行的前提是項(xiàng)目是按慣例配置的,如果你的資源文件和項(xiàng)目不在同一個(gè)目錄下,則以上就不能正常工作了,此時(shí)我們可以繼承
      WebApplicationFactory<TEntryPoint>來自定義配置,和前面.net core 2.0的配置基本類似.

      可能有些同事會(huì)有疑問,這里的工作環(huán)境也沒有配置,它是不是Development環(huán)境呢,答案是的.

      截至到發(fā)文時(shí),.net core已經(jīng)到 3.0 preview 7了.由于工作比較忙,加之對(duì)新技術(shù)新框架不像以前那樣有激情了,筆者并沒有試用過.net
      core 3.0.以上的方法僅適用于.net core
      2.1和2.2兩個(gè)版本(不適用于2.0版本,關(guān)于2.0版本的集成測試本系列也有介紹,感興趣的朋友可以翻閱一下).

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          加勒比综合在线 | 日本的一级片 | 成人狠狠爱 | 上海少妇和黑人老外做爰偷拍小说 | 免费看美女逼 | www.com豆花视频 | 久久久成人视频 | 操逼站| 性少妇bb | 国产精品高清一区二区三区 |