如何创建IOptions <MyOption>的模拟实例?

ca9*_*3d9 5 c# .net-core asp.net-core

IOptions<>根据https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options使用.

我有以下控制器.

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;
    }
Run Code Online (Sandbox Code Playgroud)

现在我正在创建一个单元测试设置.如何模拟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);
Run Code Online (Sandbox Code Playgroud)

Ehs*_*zir 12

使用帮助程序类 Microsoft.Extensions.Options.Options

尝试更换

   option = new Options<MyOptions>(); 
Run Code Online (Sandbox Code Playgroud)

    option = Options.Create(new MyOptions());
Run Code Online (Sandbox Code Playgroud)


Ste*_*ath 9

关于什么:

var optionsMock = new Mock<IOptions<MyOptions>>();
optionsMock.SetupGet(o => o.Value).Returns(new MyOptions());
Run Code Online (Sandbox Code Playgroud)