【问题标题】:How to create a mock instance of IOptions<MyOption>?如何创建 IOptions<MyOption> 的模拟实例?
【发布时间】:2018-01-16 18:31:25
【问题描述】:

我根据https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options使用IOptions&lt;&gt;

我有以下控制器。

using Microsoft.Extensions.Options;
public class MyController : Controller
{
    private readonly ILogger<SourceController> _logger;
    private readonly MyOptions _option;

    public SourceController(ILogger<SourceController> logger, IOptions<SyncOptions> optionAccessor)
    {
        _logger = logger;
        _option = optionAccessor.Value;
    }

现在我正在创建一个单元测试设置。如何模拟 IOptions()?

MyTest() { // Test constructor
    var loggerFactory = new LoggerFactory().AddConsole(LogLevel.Information).AddDebug().AddNLog();
    loggerFactory.ConfigureNLog("nlog.config");
    logger = loggerFactory.CreateLogger<MyController>();

    option = new Options<MyOptions>(); // Error! How to mock IOptions<MyOptions>()?

    app = new MyController(logger, option);

【问题讨论】:

  • 每当你想到 mock,就想到 Moq ;)

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


【解决方案1】:

使用助手类Microsoft.Extensions.Options.Options

尝试替换

   option = new Options<MyOptions>(); 

    option = Options.Create(new MyOptions());

【讨论】:

    【解决方案2】:

    怎么样:

    var optionsMock = new Mock<IOptions<MyOptions>>();
    optionsMock.SetupGet(o => o.Value).Returns(new MyOptions());
    

    【讨论】:

    • 这非常适合您使用模拟。
    猜你喜欢
    • 2010-11-27
    • 2020-02-27
    • 2020-11-27
    • 2022-01-12
    • 2019-06-18
    • 1970-01-01
    • 2020-04-03
    • 2015-10-30
    相关资源
    最近更新 更多