如何在 Mock 4.12 中仅重置模拟的设置?

Osc*_*mon 3 c# moq

每当我使用 Moq 4.12 在任何模拟中调用 .Reset 时,它都会显式重置有关模拟的所有内容,从设置到事件处理程序。

moqActionFactory.Reset();
Run Code Online (Sandbox Code Playgroud)

如何仅重置已配置的设置?我没有看到任何方法或属性(如 Invoices.Clear)可以执行此操作。

Owe*_*ing 10

我不相信这是可能的。

Reset()在MockExtensions.cs中实现为:

public static void Reset(this Mock mock)
{
    mock.ConfiguredDefaultValues.Clear();
    mock.Setups.Clear();
    mock.EventHandlers.Clear();
    mock.Invocations.Clear();
}
Run Code Online (Sandbox Code Playgroud)

这样看起来就简单了,我们只要调用Clear()集合即可Setups!但这在Mock.cs中定义为:

internal abstract SetupCollection Setups { get; }
Run Code Online (Sandbox Code Playgroud)

此外,SetupCollection也是内部的。

因此,除非这里可以完成一些反射魔法,否则从 Moq 源代码来看似乎没有受支持的方法来做到这一点。

  • 真是无赖,但无论如何,谢谢,我希望最小起订量提供一种更精细的方式来控制其属性,如果他们可以提供这个,我会写一个问题 (3认同)