public void NormalTest()
 {
     using (var disposable = new Disposable())
         using (var disposableGuard = ScopeGuard.Create(disposable))
         {
             AssertNotDisposed(disposable, disposableGuard);
             disposableGuard.Dismiss();
             AssertNotDisposed(disposable, disposableGuard);
             disposableGuard.Dispose();
             AssertNotDisposed(disposable, disposableGuard);
         }
 }
 public void FailureTest()
 {
     using (var disposable = new Disposable())
     {
         ScopeGuard <Disposable> disposableGuard = ScopeGuard.Create(disposable);
         disposableGuard.Dispose();
         Assert.IsTrue(disposable.DisposeCalled);
         AssertThrow <ObjectDisposedException>(delegate { disposableGuard.Resource.Ignore(); });
         disposableGuard.Dispose();
         AssertThrow <ObjectDisposedException>(delegate { disposableGuard.Resource.Ignore(); });
         AssertThrow <ObjectDisposedException>(delegate { disposableGuard.Dismiss(); });
     }
 }
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////////

        private static void AssertNotDisposed(Disposable disposable, ScopeGuard <Disposable> disposableGuard)
        {
            Assert.IsFalse(disposable.DisposeCalled);
            Assert.AreSame(disposable, disposableGuard.Resource);
            Assert.IsFalse(disposable.DisposeCalled);
        }