【问题标题】:How to disable services with WebApplicationFactory如何使用 WebApplicationFactory 禁用服务
【发布时间】: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


【解决方案1】:

试试这个:

var service = services.FirstOrDefault(d => d.ServiceType == typeof(IService));
if (service != null)
{
    services.Remove(service);
}

在你的 CustomWebApplication 工厂范围内

builder.ConfigureTestServices(services => ...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多