Использовать Нанит Утверждать.Бросает метод или атрибут ExpectedException?
Я обнаружил, что это, кажется, два основных способа тестирования исключений:
Assert.Throws<Exception>(()=>MethodThatThrows());
[ExpectedException(typeof(Exception))]
какой из них будет лучше? Дает ли одно преимущество перед другим? Или это просто вопрос личных предпочтений?
5 ответов:
первый позволяет проверить более одного исключения, с несколькими вызовами:
Assert.Throws(()=>MethodThatThrows()); Assert.Throws(()=>Method2ThatThrows());второй позволяет тестировать только одно исключение для каждой тестовой функции.
основным отличием является:
ExpectedException()атрибут делает тест пройден, если исключение происходит в любой место в методе теста.
ИспользованиеAssert.Throws()позволяет указатьexactместо кода, где ожидается исключение.NUnit 3.0 падает официальная поддержка
ExpectedExceptionв целом.Итак, я определенно предпочитаю использовать
Assert.Throws()метод, а не .
Я предпочитаю утверждать.бросает, так как это позволяет мне проверять и утверждать другие условия после того, как исключение брошено.
[Test] [Category("Slow")] public void IsValidLogFileName_nullFileName_ThrowsExcpetion() { // the exception we expect thrown from the IsValidFileName method var ex = Assert.Throws<ArgumentNullException>(() => a.IsValidLogFileName("")); // now we can test the exception itself Assert.That(ex.Message == "Blah"); }
вы также можете сильно ввести ожидаемую ошибку (например, старую версию attrib).
Assert.Throws<System.InvalidOperationException>(() => breakingAction())
Если вы используете старые версии() из
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
Comments