【发布时间】:2019-12-27 06:49:25
【问题描述】:
我正在使用 .NET Core 2.2 IHostBuilder(通用主机生成器)构建一个控制台应用程序,将消息流应用程序作为 BackgroundService (IHostedService) 运行。 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-2.2
这不是通常用于托管 ASP.NET Core Web 应用程序的 IWebHostBuilder。
我想构建一些基本的集成测试来验证正常关闭和 IoC 配置。我想启动一个托管我的 IHostBuilder 主机的 TestServer。我不需要处理任何类型的请求。
我已经在 Microsoft.AspNetCore.TestHost 中使用 IWebHostBuilder 和 TestServer 完成了这种事情。但是,不支持 IHostBuilder,只有 IWebHostBuilder。 https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.testhost.testserver.-ctor?view=aspnetcore-2.2#Microsoft_AspNetCore_TestHost_TestServer__ctor_Microsoft_AspNetCore_Hosting_IWebHostBuilder_
我知道 IHostBuilder 将替换 .NET Core 3.0 中的 IWebHostBuilder 并且那里的 TestServer 将支持这一点。试图在 .NET Core 2.2 中找到一种方法。
【问题讨论】:
-
为什么需要TestServer?您可以从您的测试应用程序构建一个通用主机,使用
RunAsync()运行它并测试您想要测试的任何内容。唯一的缺点是您需要在测试应用程序中重复所有 DI 注册和配置 -
@Olegl 你有例子吗?我想做的一件事是在主机发送 SIGTERM 时测试我的应用程序的正常关闭。不知道如何通过完整的集成测试来做到这一点。另一个用例是我在 OP 中所说的,我需要验证 .NET Core IoC 容器是否配置正确,例如我可以从包含中获取选择的服务,并且应用程序可以使用所有需要的依赖项正确启动。我在 ASP.NET Web 应用程序和托管在 TestHost 中的 IWebHostBuilder 中做过这种事情。没有看到任何类似的 IHostBuilder 选项。
-
你使用 IHostedService 吗?
-
@Olegl 是的,我正在使用实现 IHostedService 的 BackgroundService
-
@Dude0001 为了测试 IoC,您可以简单地解析所有已注册的服务(忽略开放的通用接口,如
IRepository<>)和所有控制器。应该足够了。而且您不需要为此运行整个应用程序。
标签: c# integration-testing .net-core-2.2