System.NotSupportedException 在 Moq 中调用 Setup()

System.NotSupportedException while calling Setup() in Moq

我正在尝试在 asp.net 核心的 IOptionsMonitor 中设置方法 OnChange。但对我来说并不明显,为什么 Setup() 不起作用。顺便说一句,我在这里看到了类似的例子 System.NotSupportedException: Unsupported expression: p => (p.UserProfileId == 1) 我也有几乎相同的例子。错误原因是什么?

执行代码:

var optionMonitorMock = new Mock<IOptionsMonitor<MyConfig>>();

optionMonitorMock
    .Setup(mock => mock.OnChange(It.IsAny<Action<MyConfig>>()));

代码异常掉落:

System.NotSupportedException. Unsupported expression: mock => mock.OnChange< MyConfig>(It.IsAny< Action< MyConfig>>()) Extension methods (here: OptionsMonitorExtensions.OnChange) may not be used in setup / verification expressions.

asp.net的界面:

public interface IOptionsMonitor<out TOptions>
{
    TOptions CurrentValue { get; }
    TOptions Get(string name);
    IDisposable OnChange(Action<TOptions, string> listener);
}

型号:

public class MyConfig
{
    public int Id { get; set; }
    public string Options { get; set; }
}

接口只公开 IDisposable OnChange(Action<TOptions, string> listener); 。你的例外说

Extension methods (here: OptionsMonitorExtensions.OnChange) may not be used in setup / verification expressions.

所以您将不得不通过该方法使用安装程序。

optionMonitorMock
    .Setup(mock => mock.OnChange(It.IsAny<Action<MyConfig,string>>()));