title: Preventing catch of NUnit AssertionException?
body: <p>I'm working on a project at the moment where I need to inter-operate with code that swallows exceptions.  In particular, I'm writing NUnit unit tests.  There are some places where I want to embed assertions within code that gets passed as a delegate, as part of mocking a particular behavior.  The problem I'm having is that the AssertionException gets swallowed by the code calling the delegate, which means the test passes, even though the test Assert failed.</p>
  
  <p>Is there any way to inform NUnit that a test should fail that can't be circumvented by catching AssertionException?  I can't modify the code that swallows the exceptions, as I don't have full ownership and it's already in semi-production use.  I'm hoping there's a clean way to accomplish this. </p>
  
  <p>The best I've come up with is something like this:</p>
  
  <pre><code>    private static string _assertionFailure;
      public static void AssertWrapper(Action action)
      {
          try
          {
              action();
          }
          catch (AssertionException ex)
          {
              _assertionFailure = ex.Message;
              throw;
          }
      }
  
      [Test]
      [ExpectedException(typeof(AssertionException))]
      public void TestDefeatSwallowing()
      {
          Action failure = () =&gt; AssertWrapper(() =&gt; Assert.Fail("This is a failure"));
  
          EvilSwallowingMethod(failure);
  
          if (_assertionFailure != null)
              Assert.Fail(_assertionFailure);
      }
  
      private void EvilSwallowingMethod(Action action)
      {
          try
          {
              action();
          }
          catch
          {
          }
      }
  </code></pre>
  
  <p>It works, but it's pretty ugly.  I have to wrap every Assert call and I have to check at the end of every test if an assertion was swallowed.</p>