集成测试和托管ASP.NET Core 6.0,没有Startup类



在的早期版本中设置单元测试。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应用程序?

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

要使用新的最小托管模型设置集成测试,您可以使web项目内部对测试可见,例如通过向csproj:添加next属性

<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");

或者不使用InternalsVisibleTo,您可以声明公共的部分Program类并使用它。例如,在顶级语句文件的底部添加(其余部分相同(:

public partial class Program { }

迁移指南中的代码示例。

相关内容

最新更新