使用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
相关产品推荐
相关产品推荐

