我有这段代码:
sub.Foo(Arg.Do<int>(() => {}));
如何撤消此操作?
.ClearReceivedCalls()
和.ClearReturnValues()
似乎对删除此委托没有任何影响
答案 0 :(得分:1)
目前还没有一种方法可以删除操作,但您可以通过不同的方式对其进行排队,以便停止运行。
第一个选项是使用外部操作,然后在以后更改它。
// Clear action manually
Action<string> action = x => SideEffect();
sub.Foo(Arg.Do<string>(x => action(x)));
// ...
action = x => { };
该方法的一种变体可以让你修改动作以自动清除它自己(或者我们可以使用一个保护子句来确保它只运行所需的次数):
// Self-clearing action (run once):
Action<string> action = x =>
{
SideEffect();
action = _ => { };
};
sub.Foo(Arg.Do<string>(x => action(x)));
另一种选择是使用Callback builder。这适用于When..Do
而非Arg.Do
,但确实可以让您对不同的操作序列排队方式有所控制(有关更为复杂的示例,请参阅documentation):
// Callback builder:
// (See )
sub.When(x => x.Foo(Arg.Any<string>()))
.Do(Callback.First(call => SideEffect()));