集成测试和托管 ASP.NET Core 6.0 without Startup class

Integration test and hosting ASP.NET Core 6.0 without Startup class

要在以前版本的 .Net Core 中设置单元测试,我可以通过以下方式在测试项目中托管我的 WebApp 或 WebAPI:

         IHost host = Host.CreateDefaultBuilder()
            .ConfigureWebHostDefaults(config =>
            {
                config.UseStartup<MyWebApp.Startup>();
                config.UseUrls("https://localhost:44331/");
                ...    
            })
            .Build();

目前的.Net 6.0没有使用Startupclass概念,无法引用。如何以正确和干净的方式在测试项目中托管 AspNet 应用程序?

请注意,如果需要,您可以切换到通用托管模型(使用启动 class 的模型)。

要使用 new minimal hosting model 设置集成测试,您可以通过将 next 属性 添加到 csproj:

来使测试人员可以看到 Web 项目内部结构
<ItemGroup>
  <InternalsVisibleTo Include ="YourTestProjectName"/>
</ItemGroup>

然后您可以使用为 WebApplicationFactory 中的网络应用程序生成的 Program class:

class MyWebApplication : WebApplicationFactory<Program>
{
    protected override IHost CreateHost(IHostBuilder builder)
    {
        // shared extra set up goes here
        return base.CreateHost(builder);
    }
}

然后在测试中:

var application = new MyWebApplication();
var client = application.CreateClient();
var response = await client.GetStringAsync("/api/WeatherForecast");

或者直接从测试中使用WebApplicationFactory<Program>

var application = new WebApplicationFactory<Program>()
.WithWebHostBuilder(builder =>
{
    builder.ConfigureServices(services =>
    {
       // set up servises
    });
});
var client = application.CreateClient();
var response = await client.GetStringAsync("/api/WeatherForecast");

来自 migration guide 的代码示例。