学习 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 ...
随机推荐
- PHP知识梳理
前端 HTML.CSS. JS(DOM操作.事件操作).Jquery(选择器.属性/值操作.事件操作).ajax PHP基础 变量(类型.类型转换) 常量(系统.自定义) 运算(算术.字符串.赋值 ...
- java logAspect
@Around("execution(* com.iotx.cep.biz.rpc.impl.*.*(..)) " + "&& !execution(* ...
- linux随机数生成
随机数多应用在密码的随机生成 #随机数生成 $RANDOM (1-32767) 11.内部系统变量($RANDOM) 1-32767 22. awk 'BEGIN{srand();print rand ...
- iostat中的util和svctm (Two traps in iostat: %util and svctm)
iostat, from the excellent sysstat suite of utilities, is the go-to tool for evaluating IO performan ...
- exp导出数据时丢表
友军发来消息,说使用exp导出某个schema的数据的时候,发现有些表没有导出来.因为一直没有使用exp的习惯,就使用exp\expdp再次导出一次,分析二者的日志,发现exp的确有些表没有导出. 问 ...
- C#指定长度截取字符串 并进行拼接。
需求:有一个字符串需要按照指定长度拆分出来,然后在增加一个字符串拼接上. /// <summary> /// 字符串截取并拼接 /// </summary> /// <p ...
- k8s官网 基础知识入门教程
官网链接为 https://kubernetes.io/docs/tutorials/kubernetes-basics/ 基础操作环境为minikube 常见基础命令 查看基础的一些信息 # 查看版 ...
- css3+svg实现波浪图
<!DOCTYPE html> <html> <head> <meta charset=utf-8> <title>css+svg实现波浪图 ...
- 【Zookeeper】连接ZooKeeper的方式
使用客户端命令连接Zookeeper 连接Server 使用命令./zkCli.sh -server 127.0.0.1:2181 使用JAVA连接使用ZK POM添加引用 <dependenc ...
- QT信号/槽
在我的理解中,QT和Android都是类似的开发框架,都是由开发团队封装了各式各样的接口和数据结构.将一些问题的解决方法简单化比如QT中将线程封装为QThread,派生类通过重写run方法来将代码投入 ...