在的早期版本中设置单元测试。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 { }
迁移指南中的代码示例。