无需启动类即可集成测试和托管ASP.NET Core 6.0

Integration test and hosting ASP.NET Core 6.0 without Startup class(无需启动类即可集成测试和托管ASP.NET Core 6.0)

本文介绍了无需启动类即可集成测试和托管ASP.NET Core 6.0的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

         IHost host = Host.CreateDefaultBuilder()
            .ConfigureWebHostDefaults(config =>
            {
                config.UseStartup<MyWebApp.Startup>();
                config.UseUrls("https://localhost:44331/");
                ...    
            })
            .Build();
当前的.Net 6.0没有使用Startup类概念,因此无法引用。如何以正确、干净的方式在测试项目中托管AspNet应用程序?

推荐答案

注意,如果需要,您可以切换到通用宿主模型(使用启动类的模型)。

要使用new minimal hosting model设置集成测试,您可以使Web项目内部对测试项目可见,例如,通过将Next属性添加到csproj:

<ItemGroup>
  <InternalsVisibleTo Include ="YourTestProjectName"/>
</ItemGroup>

然后您可以在WebApplicationFactory中使用为Web应用生成的Program类:

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中的代码示例。

这篇关于无需启动类即可集成测试和托管ASP.NET Core 6.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:无需启动类即可集成测试和托管ASP.NET Core 6.0