集成测试和托管 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没有使用Startup
class概念,无法引用。如何以正确和干净的方式在测试项目中托管 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 的代码示例。
要在以前版本的 .Net Core 中设置单元测试,我可以通过以下方式在测试项目中托管我的 WebApp 或 WebAPI:
IHost host = Host.CreateDefaultBuilder()
.ConfigureWebHostDefaults(config =>
{
config.UseStartup<MyWebApp.Startup>();
config.UseUrls("https://localhost:44331/");
...
})
.Build();
目前的.Net 6.0没有使用Startup
class概念,无法引用。如何以正确和干净的方式在测试项目中托管 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 的代码示例。