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

How to reset only the setups of a mock in Mock 4.12?

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

moqActionFactory.Reset();

如何只重置配置的设置?我看不到这样做的方法或属性(如 Invocations.Clear)。

我不相信这是可能的。

Reset()MockExtensions.cs 中实现为:

public static void Reset(this Mock mock)
{
    mock.ConfiguredDefaultValues.Clear();
    mock.Setups.Clear();
    mock.EventHandlers.Clear();
    mock.Invocations.Clear();
}

所以它看起来很简单,我们只需要在 Setups 集合上调用 Clear()!但这在 Mock.cs 中定义为:

internal abstract SetupCollection Setups { get; }

而且SetupCollection也是内部的。

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