У меня этот код:Как отменить `Arg.Do <T> (() => {})` в NSubstitute
sub.Foo(Arg.Do<int>(() => {}));
Как отменить это?
.ClearReceivedCalls()
и .ClearReturnValues()
кажется, не имеют никакого влияния на удаление этого делегата
У меня этот код:Как отменить `Arg.Do <T> (() => {})` в NSubstitute
sub.Foo(Arg.Do<int>(() => {}));
Как отменить это?
.ClearReceivedCalls()
и .ClearReturnValues()
кажется, не имеют никакого влияния на удаление этого делегата
Существует в настоящее время не способ устранить действие, но вы можете поставить его в очередь в различных способов, которые позволят вам, чтобы остановить его работу.
Первый вариант - использовать внешнее действие, а затем изменить его на более поздний момент времени.
// 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()));