Как выполнить модульное тестирование кода с внутренними исключениями?
Я хотел бы получить покрытие модульного теста по следующему коду:
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
}
}
}
Изменить: кажется, мне не нужно родинок, чтобы проверить этот код. Кроме того, у меня была ошибка с перевернутыми строками 5 и 6.
1 ответ
Решение
Вот что я получил (не надо было родинок после всего):
[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));
}
}