1. 程式人生 > >學習 ASP.NET Core 2.1:集成測試中使用 WebApplicationFactory

學習 ASP.NET Core 2.1:集成測試中使用 WebApplicationFactory

UNC enc sta 測試 修改 構造 creat -a msdn

WebApplicationFactory 是 ASP.NET Core 2.1 新特性 MVC functional test infrastructure 中帶來的新東東,它封裝了 TestServer 的使用,讓 ASP.NET Core 的集成測試更簡便、配置更靈活。

今天在一個實際項目中進行了體驗,在這篇博文中簡單記錄一下。

修改集成測試所在的 .csproj 項目文件,Sdk 要設置為 Microsoft.NET.Sdk.Web

<Project Sdk="Microsoft.NET.Sdk.Web">

添加 Microsoft.AspNetCore.App 的 nuget 包引用

<PackageReference Include="Microsoft.AspNetCore.App" />

添加 Microsoft.AspNetCore.Mvc.Testing 的 nuget 包引用,WebApplicationFactory 就在其中

<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="2.1.0" />

集成測試類實現 IClassFixture<WebApplicationFactory<Startup>> 接口

public class WebApiTest : IClassFixture<WebApplicationFactory<Startup>>
{ }

實現了 IClassFixture 接口就能自動在測試類的構造函數中依賴註入 IClassFixture 泛型中指定的類型,這裏就是 WebApplicationFactory 。

有了 WebApplicationFactory ,就可以直接用它創建 HttpClient 實例,代碼如下:

public class WebApiTest : IClassFixture<WebApplicationFactory<Startup>>
{
    
private readonly HttpClient _httpClient; public WebApiTest(WebApplicationFactory<Startup> factory) { _httpClient = factory.CreateClient(); } }

之前沒有 WebApplicationFactory 時的代碼是這樣的

public class WebApiTest
{
    private readonly HttpClient _httpClient;
    public WebApiTest()
    {
        _httpClient = new TestServer(new WebHostBuilder().UseStartup<Startup>())
            .CreateClient();
    }
}

上面簡單的示例代碼只是小試牛刀,WebApplicationFactory 更強大之處是通過繼承它重寫 ConfigureWebHost() 方法來配置 WebHost

public class CustomWebApplicationFactory<TStartup> 
    : WebApplicationFactory<Startup>
{
    protected override void ConfigureWebHost(IWebHostBuilder builder)
    {
        builder.ConfigureServices(services =>
        {
            //...
        });
    }
}

學習 ASP.NET Core 2.1:集成測試中使用 WebApplicationFactory