標籤:記錄 專案檔 code core conf ice ras 建構函式 version
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