use*_*923 20 c# unit-testing asp.net-core .net-6.0
要在以前版本的 .NET Core 中设置单元测试,我可以通过以下方式在测试项目中托管我的 Web 应用程序或 Web API:
IHost host = Host.CreateDefaultBuilder()
.ConfigureWebHostDefaults(config =>
{
config.UseStartup<MyWebApp.Startup>();
config.UseUrls("https://localhost:44331/");
...
})
.Build();
Run Code Online (Sandbox Code Playgroud)
当前.NET 6.0不使用Startup类概念,因此无法引用。如何以正确、干净的方式在测试项目中托管 ASP.NET Core 应用程序?
Gur*_*ron 26
请注意,如果需要,您可以切换到通用托管模型(使用启动类的模型)。
要使用新的最小托管模型设置集成测试,您可以使 Web 项目内部结构对测试项目可见,例如通过向 csproj 添加下一个属性:
<ItemGroup>
<InternalsVisibleTo Include ="YourTestProjectName"/>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
然后您可以Program在以下位置使用为 Web 应用程序生成的类WebApplicationFactory:
class MyWebApplication : WebApplicationFactory<Program>
{
protected override IHost CreateHost(IHostBuilder builder)
{
// shared extra set up goes here
return base.CreateHost(builder);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在测试中:
var application = new MyWebApplication();
var client = application.CreateClient();
var response = await client.GetStringAsync("/api/WeatherForecast");
Run Code Online (Sandbox Code Playgroud)
或者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");
Run Code Online (Sandbox Code Playgroud)
或者,InternalsVisibleTo您可以声明公共分部Program类并使用它,而不是使用它。例如在顶级语句文件的底部添加next(其余相同):
class MyWebApplication : WebApplicationFactory<Program>
{
protected override IHost CreateHost(IHostBuilder builder)
{
// shared extra set up goes here
return base.CreateHost(builder);
}
}
Run Code Online (Sandbox Code Playgroud)
迁移指南中的代码示例。
| 归档时间: |
|
| 查看次数: |
15801 次 |
| 最近记录: |