如何在 .Net 6 中创建测试服务器? [复制]
Posted
技术标签:
【中文标题】如何在 .Net 6 中创建测试服务器? [复制]【英文标题】:How do you create a test server in .Net 6? [duplicate] 【发布时间】:2021-11-09 11:52:20 【问题描述】:我需要为 ASP.Net 6 API 编写一些单元测试,并且需要创建一个测试服务器来验证授权。但是,由于启动类已被删除,我不知道应该使用什么作为创建测试服务器的入口点。 这是以前版本中的创建方式。
var server = new TestServer(new WebHostBuilder().UseStartup<Startup>());
【问题讨论】:
为了炫耀语言的新特性,去掉了启动类,并不代表不能放回去。UseStartup<Startup>()
方法仍然存在,ASP.NET 团队只是决定展示新的语言功能并将所有内容添加到Program
文件中,这并不意味着您不能放置它回来了,如果你想重用代码,我敦促你这样做
啊,好的,谢谢,那我就放回去吧。
【参考方案1】:
问题最终是默认情况下无法发现 Program.cs,因此我最终将其添加到 ASP.Net .csproj 文件中。
<ItemGroup>
<InternalsVisibleToInclude="Insert testing project name here" />
</ItemGroup>
并添加
public partial class Program
到 Program.cs 文件的底部
【讨论】:
这个已经至少有两个重复了【参考方案2】:您可以使用WebApplicationFactory
(它基于docs,是TestServer
的包装器,并公开了创建和获取它的属性和方法,例如CreateServer
和Server
)进行集成测试。要使用new minimal hosting model 设置它,您需要使您的 Web 项目内部对测试可见,例如通过向 csproj 添加下一个属性:
<ItemGroup>
<InternalsVisibleTo Include ="YourTestProjectName"/>
</ItemGroup>
然后您可以从为 Web 应用生成的 Program
类继承您的 WebApplicationFactory
:
class MyWebApplication : WebApplicationFactory<Program>
protected override IHost CreateHost(IHostBuilder builder)
// shared extra set up goes here
return base.CreateHost(builder);
然后在测试中:
var application = new MyTestApplication();
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 6 中创建测试服务器? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Python 中创建多个 for 循环列表的递归以获得组合? [复制]
如何使用 JUnit 5 在 Kotlin 中创建 TestContainers 基测试类
如何在Javascript中创建动态文件+链接以供下载? [复制]