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<TStartup> where TStartup : class
{
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
builder.ConfigureServices(services =>
{
//...
});
}
}

相关链接:

最新文章

  1. 电子现金、电子钱包、qPBOC、闪付、UPCash
  2. 《Node.js+MongoDB+AngularJS Web开发》读书笔记及联想
  3. 监控RAC中的临时表空间
  4. javascript操作html元素CSS属性
  5. 折腾了一早上的C# WPF ListView+Grid 实现图片+文字 自动换行排列 类似Windows资源管理器效果
  6. Java初试
  7. 调侃Cookie
  8. iOS之使用QLPreviewController打开文件,处理txt文件出现乱码的情况
  9. php数组存到文件的实现代码
  10. Wish | IT桔子
  11. c++ 14
  12. php修改配置文件php.ini设置文件上传大小讲解
  13. URL特殊字符需转义
  14. MySQL日志系统
  15. Centos7下安装PHP5.5,5.6,7.0----(转载记录一下)
  16. Learn jQuery in y seconds
  17. K-Means算法的Java实现
  18. Android WebView无法播放视频或直播,关闭界面后任在播放的问题;
  19. [转]Sqoop-1.4.4工具import和export使用详解
  20. vivado中设置多线程编译

热门文章

  1. 洛谷 P1162 填涂颜色
  2. Huginn及环境搭建
  3. Oracle&amp;SQLServer中实现跨库查询
  4. Android中的指纹识别
  5. crontab 选择编辑器 select-editor
  6. ios vue2.0使用html5中的audio标签不能播放音乐
  7. Spark性能优化指南-高级篇
  8. CRC码计算及校验原理的最通俗诠释
  9. EditText小记
  10. SAP PA Document List