学习 ASP.NET Core 2.1:集成测试中使用 WebApplicationFactory
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 =>
{
//...
});
}
}
相关链接:
学习 ASP.NET Core 2.1:集成测试中使用 WebApplicationFactory的更多相关文章
- ASP.NET Core Web API 集成测试中使用 Bearer Token
在 ASP.NET Core Web API 集成测试一文中, 我介绍了ASP.NET Core Web API的集成测试. 在那里我使用了测试专用的Startup类, 里面的配置和开发时有一些区别, ...
- 学习ASP.NET Core Razor 编程系列十二——在页面中增加校验
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
C#编译器优化那点事 使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的.优化代码 ...
- C#中的函数式编程:递归与纯函数(二) 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面
C#中的函数式编程:递归与纯函数(二) 在序言中,我们提到函数式编程的两大特征:无副作用.函数是第一公民.现在,我们先来深入第一个特征:无副作用. 无副作用是通过引用透明(Referential ...
- 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(中)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 四.创建一个Blazor应用程序 1. 第一种创 ...
- 学习ASP.NET Core Blazor编程系列十——路由(中)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 学习ASP.NET Core(10)-全局日志与xUnit系统测试
上一篇我们介绍了数据塑形,HATEOAS和内容协商,并在制器方法中完成了对应功能的添加:本章我们将介绍日志和测试相关的概念,并添加对应的功能 一.全局日志 在第一章介绍项目结构时,有提到.NET Co ...
- 学习ASP.NET Core,你必须了解无处不在的“依赖注入”
ASP.NET Core的核心是通过一个Server和若干注册的Middleware构成的管道,不论是管道自身的构建,还是Server和Middleware自身的实现,以及构建在这个管道的应用,都需要 ...
- 学习ASP.NET Core Razor 编程系列二——添加一个实体
在Razor页面应用程序中添加一个实体 在本篇文章中,学习添加用于管理数据库中的书籍的实体类.通过实体框架(EF Core)使用这些类来处理数据库.EF Core是一个对象关系映射(ORM)框架,它简 ...
- 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
随机推荐
- curl 模拟表单post文件
网上查询出来的几乎都是错误的,正确的应该是: $data = array( 'pic'=>new CURLFile($path) // 如果无效可以这样 // 'pic'=>curl_fi ...
- 解决Linux文件系统变成只读的方法
解决Linux文件系统变成只读的方法 解决方法 1.重启看是否可以修复(很多机器可以) 2.使用用 fsck – y /dev/hdc6 (/dev/hdc6指你需要修复的分区) 来修复文件系统 ...
- Redis 学习之路 (011) - redis 多数据库
一台服务器上都快开启200个redis实例了,看着就崩溃了.这么做无非就是想让不同类型的数据属于不同的应用程序而彼此分开. 那么,redis有没有什么方法使不同的应用程序数据彼此分开同时又存储在相同的 ...
- 树莓派进阶之路 (037) - 设置树莓派3 B+的静态IP
修改/etc/dhcpcd.conf 文件 sudo vim /etc/dhcpcd.conf interface eth0 static ip_address= static routers=192 ...
- 【ThinkPHP】解析ThinkPHP5创建模块
在根目录下有一个build.php文件,该文件是自动生成的,自动创建模块.build.php的文件内容如下: <?php return [ // 生成应用公共文件 '__file__' => ...
- SQL DDL 数据定义语句
前言 DDL(Data Definition Language)语句:数据定义语句,这些语句定义了不同的数据段.数据库.表.列.索引等数据库对象.常用的语句关键字主要包括 create.drop.al ...
- slackware在vagrant中使用
slackware以简洁干净的系统闻名于世,如果你想学习了解linux,那么slackware是一个很好的选择,其他linux不是不好,他们都太复杂了,复杂的你不知道从哪里开始. 所以,还是slack ...
- 命令行创建 keystore
keytool -genkey -alias android.keystore -keyalg RSA -validity 36500 -keystore android.keystore
- MySQL字符集详解
Reference: https://www.cnblogs.com/wcwen1990/p/6917109.html MySQL字符集详解 一.字符集和校验规则 字符集是一套符合和编码,校验规 ...
- 关于网站中引用COM组件的部署问题
网站中引用了(PPT V14.0,即部署的服务器需要安装Office2010的)COM组件, 因此该功能对服务器有一定的环境要求: 1.安装Office2010,并激活. 2.配置: 1)开始-运行- ...