本文介绍了无需启动类即可集成测试和托管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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!