C# 如何检查是否已使用NSubstitute调用匿名函数?

C# 如何检查是否已使用NSubstitute调用匿名函数?,c#,func,nsubstitute,C#,Func,Nsubstitute,我想检查是否使用NSubstitute调用了匿名函数。我所拥有的类中的一个方法采用了Func参数,我希望确保调用(或不调用)该参数。我尝试了以下方法,但似乎不起作用: var spy = Substitute.For<Func<string, int>>(); MyClass.DoSomething(spy); spy.Invoke(Arg.Any<string>()).Received(); var spy=Substitute.For(); MyClas

我想检查是否使用NSubstitute调用了匿名函数。我所拥有的类中的一个方法采用了
Func
参数,我希望确保调用(或不调用)该参数。我尝试了以下方法,但似乎不起作用:

var spy = Substitute.For<Func<string, int>>();
MyClass.DoSomething(spy);
spy.Invoke(Arg.Any<string>()).Received();
var spy=Substitute.For();
MyClass.DoSomething(间谍);
spy.Invoke(Arg.Any()).Received();
但是,这会引发一个异常:

NSubstitute.Exceptions.NullSubstituteReferenceException : NSubstitute extension methods like .Received can only be called on objects created using Substitute.For<T>() and related methods.
NSubstitute.Exceptions.NullSubstituteReferenceException:NSubstitute扩展方法,如.Received,只能在使用Substitute.For()和相关方法创建的对象上调用。
尝试更换

spy.Invoke(Arg.Any<string>()).Received();
spy.Invoke(Arg.Any()).Received();

spy.Received().Invoke(Arg.Any());

如果生产代码通过
spy.Invoke()
或通过
spy()
调用func,则没有区别。但是如果您的代码调用
BeginInvoke
,测试将不会成功。但我认为这不应该是个问题,因为您应该提前知道是否需要对
Invoke
BeginInvoke
进行测试。

有没有一种方法可以独立于如何调用间谍来检查它?如中所示,它可以使用BeginInvoke调用,我认为这个测试不会通过?
spy.Received().Invoke(Arg.Any<string>());