Tho*_*and 10 c# asp.net .net-6.0
我需要为 ASP.NET 6 API 编写一些单元测试,并且需要创建一个测试服务器来验证授权。但是,由于启动类已被删除,我不知道应该使用什么作为创建测试服务器的入口点。这是以前版本中创建的方式。
var server = new TestServer(new WebHostBuilder().UseStartup<Startup>());
Run Code Online (Sandbox Code Playgroud)
Gur*_*ron 10
您可以使用WebApplicationFactory(它基于docs,是一个包装器,TestServer并公开属性和方法来创建和获取它,如CreateServer和Server)进行集成测试。要使用新的最小托管模型进行设置,您需要使 Web 项目内部结构对测试项目可见,例如通过向 csproj 添加下一个属性:
<ItemGroup>
<InternalsVisibleTo Include ="YourTestProjectName"/>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
然后你可以WebApplicationFactory从Program为网络应用程序生成的类继承你的:
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 MyTestApplication();
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类显式声明为部分类。例如,将以下内容添加到顶级语句文件的底部(通常Program.cs):
public partial class Program { }
Run Code Online (Sandbox Code Playgroud)
迁移指南中的代码示例。
问题最终是默认情况下无法发现 Program.cs,因此我最终将其添加到 ASP.NET Core .csproj 文件中。
<ItemGroup>
<InternalsVisibleToInclude="{Insert testing project name here}" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
并添加
public partial class Program { }
Run Code Online (Sandbox Code Playgroud)
到 Program.cs 文件的底部
| 归档时间: |
|
| 查看次数: |
12251 次 |
| 最近记录: |