【发布时间】:2019-05-28 11:19:11
【问题描述】:
我正在向 ASP.NET Core Web 服务添加集成测试(请参阅 Microsoft 关于 Integration tests in ASP.NET Core 的文章,我已扩展 WebApplicationFactory 以将数据库提供程序替换为内存数据库。但是,ASP. NET Core Web 服务包括默认启用的其他服务。
每个服务都可以通过服务对象停止/禁用,但是在WebApplicationFactory.ConfigureServices()上调用GetRequiredService()会抛出System.InvalidOperationException。
有谁知道是否有办法禁用默认服务?
【问题讨论】:
-
注册替换默认服务的模拟,以便调用
GetRequiredService<T>()将解析您的模拟服务。 -
您首先不需要注册它们。将您需要更改为
Startup类上的虚拟方法的注册因素分解出来。然后在您的测试项目中,您可以创建一个TestStartup类,从 SUT 的Startup类继承并覆盖这些方法以执行不同的操作。 -
也就是说,在集成测试中彻底禁用服务几乎会破坏集成测试的全部意义。您现在不再使用与实际应用程序相同的设置,因此通过测试不会告诉您应用程序的实际状态。可以替换提供程序(即数据库中的内存而不是 SQL Server),但实际服务仍应以某种形式存在。
标签: c# asp.net-core integration-testing