Dot-Net
如何對 IDisposable 進行單元測試?
我正在研究一段庫程式碼
IDisposable。託管路徑 (viausing) 易於測試。不過,我想知道終結器:呼叫System.GC.Collect()足以強制終結器執行嗎?
不,GC.Collect() 呼叫是非同步的,您還需要呼叫它:
System.GC.WaitForPendingFinalizers();
我會看一下Dispose、Finalization 和 Resource Management,它是我所知道的主題的最佳參考。使用他們的模式:
~ComplexCleanupBase() { Dispose(false); } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected override void Dispose(bool disposing) { if (!disposed) { if (disposing) { // dispose-only, i.e. non-finalizable logic } // new shared cleanup logic disposed = true; } base.Dispose(disposing); }你最終得到了簡單的 Finalizer/Dispose() 方法和一個可測試的 Dispose(bool)。無需強制終結或使用 GC 類的任何東西。