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

ASP.NET Core 6.0无Startup类场景下集成测试与托管实现咨询

.NET 6+ 测试项目托管ASP.NET Core应用的解决方案

.NET 6 取消了显式的Startup类后,我们依然可以通过两种规范的方式在测试项目中托管Web应用,核心是直接使用Web项目的Program类替代原有Startup类的作用:


前置准备

首先需要让测试项目可以访问Web项目的Program类,任选一种方式配置即可:

  • 方式1:在Web项目的.csproj文件中添加内部可见性配置,直接暴露内部类给测试项目:
    <ItemGroup>
      <InternalsVisibleTo Include="你的测试项目程序集名称" />
    </ItemGroup>
    
  • 方式2:在Web项目的Program.cs文件末尾添加一行代码,显式声明公共分部类:
    public partial class Program { }
    

方案1:官方推荐(集成测试首选):使用WebApplicationFactory<T>

这是ASP.NET Core官方提供的集成测试专用工具,无需手动管理Host生命周期,还可以直接生成测试用的HttpClient,自动规避端口冲突问题。

  1. 先在测试项目安装对应NuGet包:
    Install-Package Microsoft.AspNetCore.Mvc.Testing
    
  2. 测试代码示例:
    // 直接基于Web项目的Program类创建应用工厂
    using var factory = new WebApplicationFactory<Program>();
    
    // 如果需要自定义配置(替换服务、修改监听地址等),使用WithWebHostBuilder扩展
    using var customFactory = factory.WithWebHostBuilder(builder =>
    {
        // 示例:替换原有数据库配置为内存数据库,适配测试场景
        var dbDescriptor = builder.Services.SingleOrDefault(d => 
            d.ServiceType == typeof(DbContextOptions<MyAppDbContext>));
        if (dbDescriptor != null) builder.Services.Remove(dbDescriptor);
        builder.Services.AddDbContext<MyAppDbContext>(opt => 
            opt.UseInMemoryDatabase("TestDatabase"));
        
        // 自定义监听地址
        builder.UseUrls("https://localhost:44331/");
    });
    
    // 方式A:直接获取测试用HttpClient发起请求,无需关心Host启动细节
    var testClient = customFactory.CreateClient();
    
    // 方式B:如果需要拿到Host实例手动操作
    var host = customFactory.Services.GetRequiredService<IHost>();
    

方案2:兼容旧版写法:手动构建Host

如果你习惯了旧版的手动构建Host的写法,只需要把UseStartup的泛型参数替换成Program类即可,其余逻辑和旧版完全一致:

IHost host = Host.CreateDefaultBuilder()
    .ConfigureWebHostDefaults(config =>
    {
        // 替换原有Startup为Web项目的Program类
        config.UseStartup<Program>();
        config.UseUrls("https://localhost:44331/");
        // 其余原有配置保持不变
    })
    .Build();
// 手动启动Host
await host.StartAsync();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:06:01