2012-01-03 71 views
2

我們已經在幾個類的單元測試中使用Moles取得了一些成功,這些類嚴重依賴於不能被模擬的框架對象。然而,我們遇到了一些System.Threading.ManualResetEventSystem.Threading.AutoResetEvent的障礙,因爲莫名其妙的原因,這似乎抵制了莫爾斯。更具體地說,System.Threading.Moles.MManualResetEvent.AllInstances.沒有提供我們可以設置委託的方法。 System.Threading.Thread,System.Threading.MutexSystem.Threading.ManualResetEventSlim都具有痣能力,這似乎表明支持應該可用;有誰知道它爲什麼不是,或者我們做錯了什麼?痣和System.Threading.ManualResetEvent

回答

1

這是不是真的回答這個問題,但您可能需要使用下面的,流行的技術用於嘲諷「unmockable」對象:定義一個接口,說IManualResetEvent,包含必要的方法和ManualResetEvent性能,以及適配器類,ManualResetEventAdapter,執行IManualResetEvent幷包裝實際ManualResetEvent。然後,在您的應用程序中隨處使用IManualResetEvent。如果您已經使用依賴注入框架,這非常方便,因爲您可以指定始終應將ManualResetEventAdapter傳遞給需要IManualResetEvent的類。

+0

同意。對於這種情況,您應該使用存根。問題在於這些組件不在應用程序的控制之下,因此不能通過Moles包裝組件繞道。它們不能繞道,因爲這些是由操作系統或其他系統(如IIS)處理的進程。 – 2012-01-05 16:59:26