如何在TestHost中重新绑定服务

时间:2017-09-03 08:04:23

标签: c# unit-testing asp.net-core

我正在为我的应用程序准备环境测试。我有问题如何在我的启动类中重新绑定早期的注册服务?

我在我的测试中使用TestHost,这就是我的基类看起来如何

public abstract class IntegrationTestBase : IDisposable
{
    private readonly TestServer _server;

    public IntegrationTestBase()
    {
        var webHostBuilder = new WebHostBuilder()
            .UseStartup<Startup>();

        _server = new TestServer(webHostBuilder);
    }

    public HttpClient CreateClient()
    {
        return _server.CreateClient();
    }

    public virtual void Dispose()
    {
        _server.Dispose();
    }
}

1 个答案:

答案 0 :(得分:0)

我处理覆盖集成测试注册的方式是:

使您的Startup类上的ConfigureServices方法成为虚拟。 创建一个Startup的派生类:例如:IntegrationTestStartup 覆盖ConfigureService,如:

override ConfigureServices(IServiceCollection s) 
{
    base.ConfigureServices(s);
    s.AddSingleton<IService, IMockService>();
}

由于上次注册服务是在构造函数注入发生时DI容器提供的服务,因此效果很好。

如果您依赖IEnumerable<IService>,则将解析为该服务注册的所有组件。

如果你不能从Startup类创建你的ConfigureServices虚拟我假设使用new将完成这项工作,因为WebHostBuilder创建了一个传递给它的类型的实例。

现在您可以使用以下命令构建WebHostBuilder:

var webHostBuilder = new WebHostBuilder()
    .UseStartup<IntegrationTestStartup>();

这是否有帮助,或者您可以更具体地说明什么样的&#39;重新绑定&#39;你需要吗?