You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 3.1集成测试中如何注入CustomWebApplicationFactory<Startup>

问题原因

你遇到的构造函数报错是类型不匹配导致的:
.NET Core 3.1 版本中,WebApplicationFactory<T>的WithWebHostBuilder方法返回值是父类WebApplicationFactory<Startup>类型,而你代码里声明的factory字段是自定义的CustomWebApplicationFactory<Startup>子类类型,直接赋值会触发类型转换失败的报错。

解决方法

  1. 修正测试类中factory字段的类型
    把factory字段的声明类型从CustomWebApplicationFactory<Startup>改为父类WebApplicationFactory<Startup>即可解决构造函数的报错,修改后的相关代码如下:
// 仅需修改字段类型,其余逻辑不变
private readonly WebApplicationFactory<Startup> factory;
private readonly Mock<HttpMessageHandler> githubHandler = new Mock<HttpMessageHandler>();

public ExampleTests(CustomWebApplicationFactory<Startup> factory)
{
    this.factory = factory.WithWebHostBuilder(builder =>
    {
        builder.ConfigureTestServices(services =>
        {
            services.AddHttpClient("github")
                .ConfigurePrimaryHttpMessageHandler(() => githubHandler.Object);
        });
    });
}
  1. 修复CustomWebApplicationFactory中的潜在报错
    你当前注释掉了ApplicationDBContext的注册逻辑,但后续代码仍然尝试从服务容器中获取该实例,运行时会触发服务未找到的错误:
  • 如果你需要用到数据库测试,取消AddDbContext相关代码的注释即可
  • 如果你不需要数据库测试,直接删除CustomWebApplicationFactory中所有和ApplicationDBContext相关的逻辑即可

内容的提问来源于stack exchange,提问作者Bmoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 08:15:00