nUnit Assert.That (метод, Throws.Exception) не перехватывает исключения - PullRequest
38 голосов
/ 25 марта 2010

Может кто-нибудь сказать мне, почему этот модульный тест, который проверяет исключения, терпит неудачу? Очевидно, мой настоящий тест проверяет другой код, но я использую 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 (NUnit 2.5)

Ответы [ 2 ]

60 голосов
/ 25 марта 2010

Попробуйте вместо этого:

Assert.That(() => Int32.Parse("abc"), Throws.Exception.TypeOf<FormatException>());

По сути, вам нужно передать делегат в Assert.That, точно так же, как документация в ваших ссылочных состояниях (обратите внимание, что я использовал здесь лямбда-выражение, но оно должно быть таким же).

9 голосов
/ 25 марта 2010

Какой тестовый бегун вы используете? Не все из них работают правильно с утверждениями об исключениях.

Возможно, вам повезет больше [ExpectedException (typeof(FormatException))] или даже Assert.Throws<FormatException> (() => Int32.Parse("abc"));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...