我们在单元测试中使用Moles取得了一些成功,这些类严重依赖于无法模拟的框架对象。我们遇到了System.Threading.ManualResetEvent
和System.Threading.AutoResetEvent
的障碍,但由于莫名其妙的原因,它似乎抵制了摩尔斯。更具体地说,System.Threading.Moles.MManualResetEvent.AllInstances.
没有提供我们可以设置委托的方法。 System.Threading.Thread
,System.Threading.Mutex
和System.Threading.ManualResetEventSlim
都具有Moles功能,这似乎表明支持应该可用;有谁知道为什么不是,或者我们做错了什么?
答案 0 :(得分:1)
这并没有真正回答这个问题,但您可能希望使用以下流行的技术来模拟“unmockable”对象:定义一个接口,比如说IManualResetEvent
,其中包含来自{{{}的必要方法和属性1}}和一个适配器类ManualResetEvent
,它实现ManualResetEventAdapter
并包装实际的IManualResetEvent
。然后,在应用程序的任何位置使用ManualResetEvent
。如果您已经在使用依赖注入框架,那么这是特别方便的,因为您可以指定始终将IManualResetEvent
传递给需要ManualResetEventAdapter
的类。