zoukankan      html  css  js  c++  java
  • 学习 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 =>
            {
                //...
            });
        }
    }

    相关链接:

  • 相关阅读:
    【opencv.js】将图片转换为灰度图
    【快速创建】第一个 opencv.js 项目
    【踩坑无数】Anaconda(2020.02) + Tensorflow2.1 + python3.7 (CPU版本)的安装
    Thread的join方法
    常用语句
    获取当前托管线程的唯一标识符
    修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限(转载)
    C#中Monitor和Lock以及区别(转载)
    LIBRA查询
    Select()和SelectMany()的区别
  • 原文地址:https://www.cnblogs.com/dudu/p/9195433.html
Copyright © 2011-2022 走看看