(В отличие от ответа Маккоттла) Длинный ответ: НЕТ ... большую часть времени
Когда вы говорите, что ожидаете, что тест вызовет определенное исключение, вы будете знать, когда ЛЮБАЯ строка в этом тесте вызывает это конкретное исключение.
Это не совсем то же самое, что знать, что тестируемый метод вызывает исключение.
Если ваш тест включает в себя настройку объекта или контекста (в рамках теста, а не в версии вашего фреймворка SetUp
), вам может быть лучше обернуть одну строку, которую вы действительно хотите протестировать, в try / catch, возможно, с помощью помощника.
Например,
public static class AssertHelper {
public delegate void Thunk();
public static void DoesNotThrow<T>(Thunk thunk, string message = "")
where T: Exception {
try {
thunk.Invoke();
} catch(T) {
Assert.Fail(message);
}
}
}
а потом
[TestMethod]
public void assertHelperInAction() {
// Random setup stuff here that's too annoying to put in my SetUp
// method.
AssertHelper.DoesNotThrow<IllegalArgumentException>(() =>
{/* My random method under test */})
}
Если этот тест не пройден, я знаю, что мой тестируемый метод выдал исключение, а не что-то в случайной установке.
(Вы должны попытаться избежать случайной настройки. Иногда легче иметь некоторый установочный код в тесте.)