(На відміну від відповіді mcottle) Довга відповідь: НІ ... більшість часу
Коли ви скажете, що очікуєте, що тест підніме певний виняток, ви дізнаєтесь, коли будь-який рядок у цьому тесті піднімає саме цей виняток.
Це не зовсім те саме, що знати, що тестований метод кидає виняток.
Якщо ваш тест передбачає налаштування об'єкта чи контексту (у межах тесту, а не у версії вашої рамки SetUp
), можливо, вам буде краще загортати єдиний рядок, який ви насправді хочете перевірити, у спробі / лові, можливо, за допомогою помічника.
Наприклад,
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 */})
}
Якщо цей тест виявляється невдалим, я знаю, що мій тестовий метод викинув виняток, а не щось із випадкових налаштувань.
(Ви повинні намагатися уникати випадкових налаштувань. Іноді простіше мати код тестування в тесті.)