То, что вы предлагаете, действительно. Помимо вашей проблемы с покрытием кода, я бы сказал, что это лучше, чем использование атрибута ExpectedException
, поскольку он явно показывает, какая строка теста может выдать исключение. Использование ExpectedException
означает, что любая строка кода в тесте может выдать ожидаемый тип исключения, и тест все равно будет пройден. Если ошибка возникает из-за другого вызова, который не должен был генерировать, это может скрыть тот факт, что тест должен быть неудачным, потому что строка, которая должна выдавать, не является.
Что было бы полезным, если бы вы предложили изменить возвращаемое исключение:
public static _T ExpectException<_T> (Action action) where _T: Exception
{
try { action(); }
catch (_T ex) { return ex; }
Assert.Fail ("Expected " + typeof(_T));
return null;
}
Это позволило бы тестовому коду дополнительно утверждать исключение, если оно требуется (т. Е. Проверять, использовалось ли конкретное сообщение).
NUnit (хотя не похоже, что вы используете его, поскольку у вас есть атрибут TestMethod
), имеет встроенную конструкцию, аналогичную предложенной вами:
Assert.Throws<ArgumentNullException>(() => Foo.DoStuff(null))