Assert.Throws
повертає викинутий виняток, який дозволяє стверджувати про виключення.
var ex = Assert.Throws<Exception>(() => user.MakeUserActive());
Assert.That(ex.Message, Is.EqualTo("Actual exception message"));
Тож якщо не викинуто жодного винятку або викинуто виняток неправильного типу, першим Assert.Throws
твердження провалиться. Однак якщо викинуто виняток правильного типу, то тепер ви можете стверджувати про фактичне виключення, яке ви зберегли у змінній.
За допомогою цього шаблону ви можете стверджувати про інші речі, ніж повідомлення про виключення, наприклад у випадку ArgumentException
та похідних, ви можете стверджувати, що назва параметра є правильним:
var ex = Assert.Throws<ArgumentNullException>(() => foo.Bar(null));
Assert.That(ex.ParamName, Is.EqualTo("bar"));
Ви також можете використовувати API для вільного виконання цих тверджень:
Assert.That(() => foo.Bar(null),
Throws.Exception
.TypeOf<ArgumentNullException>()
.With.Property("ParamName")
.EqualTo("bar"));
або альтернативно
Assert.That(
Assert.Throws<ArgumentNullException>(() =>
foo.Bar(null)
.ParamName,
Is.EqualTo("bar"));
Невелика порада при затвердженні повідомлень про виключення полягає в тому, щоб прикрасити метод тестування, SetCultureAttribute
щоб переконатися, що закинуте повідомлення використовує очікувану культуру. Це починає грати, якщо ви зберігаєте повідомлення про виключення як ресурси, щоб дозволити їх локалізацію.