學習 ASP.NET Core 2.1:集成測試中使用 WebApplicationFactory
阿新 • • 發佈:2018-06-18
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