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

问题描述 投票:0回答:2

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

moqActionFactory.Reset();

如何仅重置已配置的设置?我没有看到任何方法或属性(如 Invoices.Clear)可以这样做。

c# moq
2个回答
10
投票

我不相信这是可能的。

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 源代码来看似乎没有受支持的方法来做到这一点。


0
投票

如今,您可以使用

SetupRemove()
删除特定设置。
例如,
mock.SetupRemove(_ => _.FooMethod(It.IsAny<int>()));

© www.soinside.com 2019 - 2024. All rights reserved.