每当我使用 Moq 4.12 在任何模拟中调用 .Reset 时,它都会显式重置有关模拟的所有内容,从设置到事件处理程序。
moqActionFactory.Reset();
如何仅重置已配置的设置?我没有看到任何方法或属性(如 Invoices.Clear)可以这样做。
我不相信这是可能的。
Reset()
在 MockExtensions.cs 中实现为:
public static void Reset(this Mock mock)
{
mock.ConfiguredDefaultValues.Clear();
mock.Setups.Clear();
mock.EventHandlers.Clear();
mock.Invocations.Clear();
}
所以看起来很简单,我们只需在
Clear()
集合上调用 Setups
即可!但这在 Mock.cs 中定义为:
internal abstract SetupCollection Setups { get; }
此外 SetupCollection 也是内部的。
因此,除非可以在这里完成一些反射魔法,否则从 Moq 源代码来看似乎没有受支持的方法来做到这一点。
如今,您可以使用
SetupRemove()
删除特定设置。mock.SetupRemove(_ => _.FooMethod(It.IsAny<int>()));