.NET怎么做集成测试 WebApplicationFactory使用教程

admin 百科 15
WebApplicationFactory 是 .NET 集成测试核心工具,支持内存中轻量应用启动、自定义服务配置、模拟认证及隔离清理。一、继承并调用 CreateClient;二、重写 ConfigureWebHost 替换服务;三、通过 AddScheme 注册测试认证方案;四、配合 IClassFixture 管理生命周期并确保数据库等资源隔离。

.NET怎么做集成测试 WebApplicationFactory使用教程-第1张图片-佛山资讯网

WebApplicationFactory 是 .NET 集成测试的核心工具,它能启动一个轻量、内存中的测试版 Web 应用,不依赖真实 IIS 或 Kestrel,也不需要端口占用或进程管理,特别适合验证控制器逻辑、中间件行为、依赖注入配置和端到端 HTTP 流程。

一、基础用法:创建并使用 WebApplicationFactory

在测试项目中安装 Microsoft.AspNetCore.Mvc.Testing NuGet 包(.NET 5+ 已内置,但建议显式引用)。

假设你的主项目叫 MyApp.Web,其程序入口是 Program.cs(Minimal Hosting Model)或 Startup.cs(传统模型),则测试类可这样写:

  • 继承 WebApplicationFactory<program></program>(Minimal 模型)或 WebApplicationFactory<startup></startup>(传统模型)
  • 通过 CreateClient() 获取 HttpClient,它自动指向内存中运行的应用
  • 无需手动启动/停止应用,工厂会在测试前后自动处理生命周期

示例:

[Fact]
public async Task GetHome_ReturnsSuccess()
{
    var factory = new WebApplicationFactory<Program>();
    var client = factory.CreateClient();
    var response = await client.GetAsync("/");
    response.EnsureSuccessStatusCode();
}

登录后复制

二、自定义应用配置:重写 CreateWebHostBuilder 或 ConfigureWebHost

默认情况下,WebApplicationFactory 会复用你主项目的宿主配置。但测试时往往需要替换服务(如用内存数据库代替 SQL Server)、跳过认证、或注入 Mock 对象。

推荐方式是重写 ConfigureWebHost 方法:

  • 调用 builder.ConfigureServices(services => { ... }) 替换或新增服务
  • 调用 builder.UseEnvironment("Testing") 切换环境,配合 IWebHostEnvironment 做条件注册
  • 避免修改 Program.cs 主逻辑,所有测试定制都收束在测试类内部

常见替换示例(用 InMemoryDatabase):

标签: app access 端口 工具 iis ai microsoft 解决方法 .net

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~