.netcore持續集成測試篇之 .net core 2.1項目集成測試

系列目錄html

從.net到.net core之後,微軟很是努力,以每一年一到兩個大版本的頻率在演進.net core,去年相繼發佈了.net core 2.1和2.2,其中2.1是長期支持版,不斷的快速更新一方面快速彌補了相比.net framework缺失的api,同時也帶來了很多激進性的改變,致使不少api,尤爲是較傳統framework相比新增的api不斷調整,有些api在上一個版本還能用,結果到下一個版本就不支持了.升級到2.1之後,微軟就更改了集成測試服務器的包名並改變了2.0的接口,進行了更高層次的封裝,下降了使用配置難度.可是截至寫本文時VisualStudio工具支持仍然不是太好,須要手動修改csproj文件.可是這個工做也是一次性的.配置好了就ok啦.api

看到這裏可能有些同志會擔憂接口變化很大之前學的東西都白瞎了,其實否則,只是建立TestServer的方式變了,咱們實際測試中用到的最多的是HttpClient這個對象,它並無變.服務器

下面就介紹一下.net core 2.1下如何搭建一個內存集成測試服務器.
首先咱們新建一個.net core 2.1的mvc項目,並建立一個Xunit單元測試項目,引用剛建立的這個mvc項目,關於建立跟前面同樣,這裏再也不贅述.mvc

下載如下兩個包:Microsoft.AspNetCore.App和Microsoft.AspNetCore.Mvc.Testing框架

咱們建立一個名爲netcoremvc21的測試類,它的代碼以下async

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);
        }
    }
}

咱們建立的項目實現了IClassFixture泛型接口,前面咱們講了這個接口的做用了,這裏再也不贅述,它裏面的泛型參數是一個WebApplicationFactory泛型對象,這個對象是微軟提供好的,不須要咱們本身建立,這個泛型對象的參數是一個TEntryPoint對象,其實就是指定程序的startup文件(這裏咱們提供的是mvc項目的startup文件,這個項目名爲CoreMvc21).它實際上是把建立內存測試服務器的方法給封裝了,相似咱們前面的封裝,減小了手寫代碼量,而且提供了最佳實踐,咱們前面說到過,若是對Xunit不熟悉在構造函數裏建立非託管對象非形成嚴重性能問題.函數

下面的測試代碼和前面的並沒太大區別,都是經過httpclient對象構造請求.工具

測試接口數據沒問題,咱們再來看看此次是沒有配置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);
        }

以上代碼測試也是經過的,也就是咱們不須要額外的配置,基本功能都能正常運行了.當前以上能正常運行的前提是項目是按慣例配置的,若是你的資源文件和項目不在同一個目錄下,則以上就不能正常工做了,此時咱們能夠繼承WebApplicationFactory<TEntryPoint>來自定義配置,和前面.net core 2.0的配置基本相似.

可能有些同事會有疑問,這裏的工做環境也沒有配置,它是否是Development環境呢,答案是的.

截至到發文時,.net core已經到 3.0 preview 7了.因爲工做比較忙,加之對新技術新框架不像之前那樣有激情了,筆者並無試用過.net core 3.0.以上的方法僅適用於.net core 2.1和2.2兩個版本(不適用於2.0版本,關於2.0版本的集成測試本系列也有介紹,感興趣的朋友能夠翻閱一下).

相關文章
相關標籤/搜索