我正在为我的应用程序准备环境测试。我有问题如何在我的启动类中重新绑定早期的注册服务?
我在我的测试中使用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();
}
}
答案 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;你需要吗?