Dot-Net

如何對 IDisposable 進行單元測試?

  • February 11, 2009

我正在研究一段庫程式碼IDisposable。託管路徑 (via using) 易於測試。不過,我想知道終結器:呼叫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 類的任何東西。

引用自:https://stackoverflow.com/questions/246364