解决IOptions 在单元测试中

问题描述 投票:0回答:1

我有一个这样的课:

public class Test : ITest
{
    public Test(IOptions<CustomSection> settings)
    {
        //do something
    }
}

我想进行单元测试并保持依赖注入。所以要做到这一点,我尝试了以下内容:

var builder = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json", true, true)
    .AddEnvironmentVariables();

var configurationRoot = builder.Build();

//This is a method that injects various services.
var services = InjectServices();

services.AddSingleton<IConfiguration>(configurationRoot);
var provider = services.BuildServiceProvider();

var my service = provider.GetService<ITest>();

但是,我收到以下错误:

尝试激活“测试”时无法解析servifor类型'Microsoft.Extensions.Options.IOptions`1 [Test]'。

如何向注入添加IOptions?我认为services.AddSingleton<IConfiguration>(configurationRoot);会做的伎俩,但它似乎没有。此外,我的配置是正确的,如果我在我的主项目中使用相同的appsettings,没有问题。

c# unit-testing asp.net-core asp.net-core-2.0 asp.net-core-configuration
1个回答
2
投票

您忘记注册使用选项所需的服务:

// extension method defined in Microsoft.Extensions.Options
services.AddOptions();

此外,您应该设置如何通过以下方式从配置构建CustomSection

services.Configure<CustomSection>(configurationRoot);

参考Configuration in ASP.NET Core

参考Options pattern in ASP.NET Core

© www.soinside.com 2019 - 2024. All rights reserved.