Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to unit test code with inner exceptions?

I would like to get some unit test coverage on the following code:

public static class ExceptionExtensions {
   public static IEnumerable<Exception> SelfAndAllInnerExceptions(
      this Exception e) {
      yield return e;
      while (e.InnerException != null) {
         e = e.InnerException; //5
         yield return e; //6
      }
   }
}

Edit: it appears I did not need Moles to test this code. Also, I had a bug with lines 5 and 6 reversed.

like image 596
GregC Avatar asked Feb 11 '26 20:02

GregC


1 Answers

This is what I got (did not need Moles afterall):

[TestFixture]
public class GivenException
{
   Exception _innerException, _outerException;

   [SetUp]
   public void Setup()
   {
      _innerException = new Exception("inner");
      _outerException = new Exception("outer", _innerException);
   }

   [Test]
   public void WhenNoInnerExceptions()
   {
      Assert.That(_innerException.SelfAndAllInnerExceptions().Count(), Is.EqualTo(1));
   }

   [Test]
   public void WhenOneInnerException()
   {
      Assert.That(_outerException.SelfAndAllInnerExceptions().Count(), Is.EqualTo(2));
   }

   [Test]
   public void WhenOneInnerException_CheckComposition()
   {
      var exceptions = _outerException.SelfAndAllInnerExceptions().ToList();
      Assert.That(exceptions[0].InnerException.Message, Is.EqualTo(exceptions[1].Message));
   }
}
like image 122
GregC Avatar answered Feb 15 '26 11:02

GregC



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!