使用 xUnit 测试依赖注入范围 "coherence"
Test Dependency Injection scope "coherence" with xUnit
在 AzureFunction 中,我将一些服务注册为范围服务,将其他一些服务注册为单例服务。
事实证明,Singleton 的依赖项是 Scoped 服务(一件坏事),在运行时我得到 this kind of exception.
我希望能够编写一个单元测试来检查与运行时相同的东西,但我没有成功。谁能帮帮我?
我尝试了什么:
// Arrange
var functionStartup = new MyFunctionStartup();
var serviceCollection = new ServiceCollection();
var functionHostBuilder = A.Fake<IFunctionsHostBuilder>();
A.CallTo(() => functionHostBuilder.Services).Returns(serviceCollection);
// Act
// doing in fact under the hood:
// services.AddSingleton<ISingleton, Singleton>();
// services.AddScoped<IScopedDependencyOfSingleton, ScopedDependencyOfSingleton>();
functionStartup.Configure(functionHostBuilder);
// Assert
var provider = serviceCollection.BuildServiceProvider();
var singleton = provider.GetService<ISingleton>();
您可以从服务提供商处获得底层 DryIoc IContainer
并 Validate
获得单例中的俘虏依赖:
var container = provider.GetRequiredService<IContainer>();
var errors = container.Validate(ServiceInfo.Of<ISingleton>());
if (errors.Count > 0)
{
// handle errors
}
这里是 documentation 验证。
在 AzureFunction 中,我将一些服务注册为范围服务,将其他一些服务注册为单例服务。 事实证明,Singleton 的依赖项是 Scoped 服务(一件坏事),在运行时我得到 this kind of exception.
我希望能够编写一个单元测试来检查与运行时相同的东西,但我没有成功。谁能帮帮我?
我尝试了什么:
// Arrange
var functionStartup = new MyFunctionStartup();
var serviceCollection = new ServiceCollection();
var functionHostBuilder = A.Fake<IFunctionsHostBuilder>();
A.CallTo(() => functionHostBuilder.Services).Returns(serviceCollection);
// Act
// doing in fact under the hood:
// services.AddSingleton<ISingleton, Singleton>();
// services.AddScoped<IScopedDependencyOfSingleton, ScopedDependencyOfSingleton>();
functionStartup.Configure(functionHostBuilder);
// Assert
var provider = serviceCollection.BuildServiceProvider();
var singleton = provider.GetService<ISingleton>();
您可以从服务提供商处获得底层 DryIoc IContainer
并 Validate
获得单例中的俘虏依赖:
var container = provider.GetRequiredService<IContainer>();
var errors = container.Validate(ServiceInfo.Of<ISingleton>());
if (errors.Count > 0)
{
// handle errors
}
这里是 documentation 验证。