Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 写入测试对象是否已正确处理_C#_Testing_Dispose - Fatal编程技术网

C# 写入测试对象是否已正确处理

C# 写入测试对象是否已正确处理,c#,testing,dispose,C#,Testing,Dispose,编写测试以检查IDisposable接口的dispose方法在调用后是否正确释放非托管资源的好方法是什么 private bool disposed = false; protected virtual void Dispose(bool disposing) { if (disposed) return; if (disposing) { // Free any other

编写测试以检查
IDisposable
接口的dispose方法在调用后是否正确释放非托管资源的好方法是什么

   private bool disposed = false;

   protected virtual void Dispose(bool disposing)
    {
        if (disposed)
            return;

        if (disposing)
        {
            // Free any other managed objects here.               
        }

        // Free any unmanaged objects here
        theUnmanagedResource.Dispose();
        disposed = true;
    }
我想我可以检查disposed之后是否为false,但它不能保证资源得到管理

另一种方法是在
unmanagedResources.Dispose()
之后设置
unmanagedResource=null
,并在测试用例中检查之后是否为null。但在其他帖子中,他们指出,将disposed resources设置为null后不是一个好方法:

如前所述,您可以检查是否直接调用了IDispose.Dispose(正确处理对象),然后在虚拟void Dispose中bool disposing将为true(bool disposing):


我不知道链接的问题是哪里不好?你可以模拟非托管资源并检查是否调用了dispose。与论坛网站不同,我们不使用“谢谢”或“感谢任何帮助”或签名。看见我编辑了你的标题。看看哪里的共识是“不,他们不应该”。
using System;

class BaseClass : IDisposable
{
   // Flag: Has Dispose already been called? 
   bool disposed = false;

   // Public implementation of Dispose pattern callable by consumers. 
   public void Dispose()
   { 
      Dispose(true);
      GC.SuppressFinalize(this);           
   }

   // Protected implementation of Dispose pattern. 
   protected virtual void Dispose(bool disposing)
   {
      if (disposed)
         return; 

      if (disposing) {
         // Free any other managed objects here. 
         //
      }

      // Free any unmanaged objects here. 
      //
      disposed = true;
   }

   ~BaseClass()
   {
      Dispose(false);
   }
}