Я обнаружил, что это два основных способа проверки исключений:
Assert.Throws<Exception>(()=>MethodThatThrows());
[ExpectedException(typeof(Exception))]
Какой из них будет лучше? Предлагает ли одно преимущество перед другим? Или это просто вопрос личных предпочтений?
Assert.That(() => MethodThatThrows(), Throws.Exception)
ExpectedException
атрибут, поэтому для версии 3+Assert.Throws
актуален только вариант.Ответы:
Первый позволяет тестировать более одного исключения с несколькими вызовами:
Второе позволяет вам проверить только одно исключение для каждой тестовой функции.
источник
Assert.Throws
.Основным отличием является:
ExpectedException()
Атрибут делает тест пройденным, если исключение происходит в любом месте в методе теста.Использование
Assert.Throws()
позволяет указатьexact
место кода, где ожидается исключение.NUnit 3.0 полностью исключает официальную поддержку
ExpectedException
.Поэтому я определенно предпочитаю использовать
Assert.Throws()
метод, а неExpectedException()
атрибут.источник
Я предпочитаю assert.throws, поскольку он позволяет мне проверять и утверждать другие условия после возникновения исключения.
источник
Вы также можете строго ввести ожидаемую ошибку (например, старую версию attrib).
источник
Если вы используете более старую версию ( <= 2.0 ),
NUnit
то вам нужно использоватьExpectedException
.Если вы используете 2.5 или более позднюю версию, то вы можете использовать
Assert.Throw()
https://github.com/nunit/docs/wiki/Breaking-Changes
Как использовать: https://www.nunit.org/index.php?p=exceptionAsserts&r=2.5
источник