NUnit Assert.That(метод, Throws.Exception), не перехватывающие исключения
Может кто-нибудь сказать мне, почему этот unit test, который проверяет исключения, терпит неудачу? Очевидно, что мой настоящий тест проверяет другой код, но я использую Int32.Parse, чтобы показать проблему.
[Test]
public void MyTest()
{
Assert.That(Int32.Parse("abc"), Throws.Exception.TypeOf<FormatException>());
}
Тест завершился неудачно, указав эту ошибку. Очевидно, я пытаюсь проверить это исключение, и я думаю, что в моем синтаксисе отсутствует что-то.
Error 1 TestCase '.MyTest'
failed: System.FormatException : Input string was not in a correct format.
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.Int32.Parse(String s)
на основе документации в Throws Constraint (NUnit 2.5)
Ответы
Ответ 1
Попробуйте это вместо:
Assert.That(() => Int32.Parse("abc"), Throws.Exception.TypeOf<FormatException>());
В принципе вам нужно передать делегат на Assert.That
, как и документация в ваших состояниях ссылок (обратите внимание, что здесь я использовал выражение лямбда, но оно должно быть одинаковым).
Ответ 2
Какой тестовый бегун вы используете? Не все из них корректно работают с утверждениями об исключениях.
Возможно, вам удастся использовать [ExpectedException (typeof(FormatException))]
или даже Assert.Throws<FormatException> (() => Int32.Parse("abc"));