使用WebApplicationFactory运行集成测试时出现“未配置应用程序”错误。

6

我正在为使用 .net5 的应用编写集成测试。我使用了 WebApplicationFactory 和 IHostBuilder 来设置环境。

自定义 fixture ->

public class TestFixture<T> : WebApplicationFactory<Program>
{
    protected override IHostBuilder CreateHostBuilder()
    {
       var builder = Host.CreateDefaultBuilder();
       builder.ConfigureAppConfiguration((hostingContext, config) =>
       {
           var env = hostingContext.HostingEnvironment;
           config.SetBasePath(env.ContentRootPath);
           config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
           config.AddEnvironmentVariables();
       })
       .ConfigureServices((hostContext, services) => { services.Configure(hostContext); });
       return builder;
   }
protected override void ConfigureWebHost(IWebHostBuilder builder)
{
    builder.ConfigureTestServices((services) =>
    {
        services.RemoveAll(typeof(IHostedService));
    });
}

services.Configure(hostContext)调用UnityContainer注册工作流(https://github.com/danielgerlag/workflow-core)。

测试类(运行测试时出错)-> 错误

错误描述 -> 未配置应用程序。请通过IWebHostBuilder.UseStartup、IWebHostBuilder.Configure或在Web主机配置中指定启动程序集的StartupAssemblyKey来指定应用程序


为什么你在不使用ASP.NET Core的情况下,要专门使用一个用于测试ASP.NET Core应用程序的包呢?这种方法毫无意义。 - Camilo Terevinto
2
@CamiloTerevinto 在这种情况下,我应该使用什么来添加集成测试?我的应用程序是一个控制台应用程序,目标框架为 .net 5,并且有两个 HostBuilder 运行,用于添加两个托管服务。其中一个用于从队列中读取消息并添加到数据库,另一个用于读取数据库并启动工作流程,如原始问题所述。 - Anubhav Mathur
1个回答

8
.ConfigureServices 调用之后添加以下代码:.ConfigureWebHostDefaults(b => b.Configure(app => {})); 您正在使用不运行 Web 主机的 Worker 服务。然而,WebApplicationFactory 仍然期望其中一个,因此请创建一个空的 Web 应用程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接