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

使用WebApplicationFactory运行.NET5集成测试出现“No app configured”错误如何解决?

错误根因

No application configured错误产生的核心原因是你重写CreateHostBuilder时完全替换了WebApplicationFactory默认的Web主机初始化逻辑,没有保留原Web项目的启动配置关联,导致框架找不到Web应用的启动入口。

排查&解决步骤
  • 不要完全新建IHostBuilder实例,调用基类CreateHostBuilder()方法继承原有Web项目的启动逻辑,修正后的夹具代码如下:
public class TestFixture<T> : WebApplicationFactory<Program>
{
    protected override IHostBuilder CreateHostBuilder()
    {
        // 继承基类默认的Web主机配置,不要完全重建
        var builder = base.CreateHostBuilder();
        builder.ConfigureAppConfiguration((hostingContext, config) =>
        {
            // 替换为测试项目输出目录作为配置根路径,避免找不到appsettings.json
            config.SetBasePath(AppContext.BaseDirectory);
            config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
            config.AddEnvironmentVariables();
        })
        .ConfigureServices((hostContext, services) => 
        { 
            services.Configure(hostContext); 
        });
        return builder;
    }
    protected override void ConfigureWebHost(IWebHostBuilder builder)
    {
        // 若原Web项目使用Startup类配置,补充此行指定启动类
        // builder.UseStartup<Startup>();
        builder.ConfigureTestServices((services) =>
        {
            services.RemoveAll(typeof(IHostedService));
        });
    }
}
  • 检查原Web项目的类型可见性:在原Web项目的.csproj文件中添加配置,允许测试项目访问内部类型:
<ItemGroup>
  <InternalsVisibleTo Include="你的测试项目程序集名称" />
</ItemGroup>

如果原项目使用顶级语句的Program类,需要给Program添加partial修饰符。

  • 验证配置文件属性:将测试项目中的appsettings.json文件的「复制到输出目录」属性设置为「如果较新则复制」,避免运行时找不到配置文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:09:01