Search code examples
c#.netunit-testingmolesinner-exception

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.


Solution

  • 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));
       }
    }