期间需要挖孔的BeginInvoke援助掉委托类型。在我的课,我已经声明了一个委托类型,我创建它的一个实例,然后调用的BeginInvoke关闭该实例:单元测试
public class ClassA
{
...
public delegate bool MyDelegate(int x);
...
public void MethodA()
{
...
var myDelegate = new MyDelegate(Foo);
myDelegate.BeginInvoke(...);
...
}
...
}
在为MethodA编写单元测试,我不需要实际上曾经想要调用BeginInvoke。我想要做的就是使用Moles框架来完成BeginInvoke调用。通常,我会尝试
MMyDelegate.AllInstances.BeginInvoke... = (...) => { /* something here */ }
但我一直无法得到痣产生任何MyDelegate类型。
根据http://msdn.microsoft.com/en-us/library/system.delegate.aspx,“公共语言运行库为每个委托类型提供了BeginInvoke和EndInvoke方法”。如果是这种情况,并且BeginInvoke甚至不是Delegate类中的一个方法(由CLR提供),它甚至有可能嘲笑它吗?有没有人有幸将BeginInvoke从委托类型中剔除出来?
我不明白这一点。 BeginInvoke()充满了龙,它启动一个线程池线程来运行委托目标。线程是*难*。单元测试代码没有意义绕过代码失败的最可能且最不可知的原因。如果你找不到一个痣,一个假的或者任何其他的标签,那肯定是因为这些框架不希望你忽略你应该测试的最重要的东西。 –