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

.NET 6集成测试:如何创建不执行主Program.cs的自定义Program类

如何创建测试专用的独立Program类(避免执行主项目自定义中间件)

要在集成测试中完全绕过主项目的Program.cs,你可以按以下步骤创建测试专用的启动类:

1. 在测试项目中创建测试专用Program类

在测试项目下新建一个Program.cs文件,编写仅满足测试需求的启动逻辑,完全剔除不需要的自定义中间件。示例代码如下:

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;

var builder = WebApplication.CreateBuilder();

// 仅添加测试必需的服务,比如控制器、路由等
builder.Services.AddControllersWithViews();

var app = builder.Build();

// 仅配置测试需要的中间件,跳过主项目的自定义中间件
app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

app.Run();

// 为让WebApplicationFactory能定位到该类,显式声明类(适配顶级语句写法)
public partial class TestProgram { }

2. 修改测试代码,使用测试专用Program类

将原测试代码中的WebApplicationFactory<Program>替换为测试项目中创建的TestProgram,这样测试时就会加载这个专用启动类,完全不执行主项目的Program.cs:

public async Task HelloWorldTest()
{
    var application = new WebApplicationFactory<TestProgram>()
        .WithWebHostBuilder(builder =>
        {
            // 这里可继续配置测试专属的服务替换、模拟逻辑等
        });

    var _client = application.CreateClient();
    // 注意:请求地址需用相对路径,修正原代码中的格式错误
    var response = await _client.GetAsync("/home");
}

额外注意事项

  • 如果主项目的Program.cs使用顶级语句写法,默认不会生成可被外部引用的类,因此测试专用Program需要显式声明类(如示例中的public partial class TestProgram { }),确保WebApplicationFactory能正确定位。
  • 测试专用Program的逻辑可根据测试场景灵活调整,比如只注册必要服务、简化中间件管道,甚至添加测试专属的模拟服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:27:20