在单元测试中解析IOptions <t>

时间:2018-07-29 19:15:11

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

我有一个这样的课程:

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>();

但是,出现以下错误:

  

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

如何将IOptions添加到注入中?我以为services.AddSingleton<IConfiguration>(configurationRoot);可以解决问题,但事实并非如此。另外,我的配置是正确的,如果我在主项目中使用相同的appsettings,就不会有问题。

1 个答案:

答案 0 :(得分: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