В NUnit, как я могу явно провалить тест - PullRequest
7 голосов
/ 11 июля 2011

Например, код ниже,

[Test()]
public void Test( )
{
   try{
      GetNumber( );
   }
   catch( Exception ex ){
       /* fail here */
   }

   ...
}

Я хочу провалить свой тест, когда метод GetNumber выдает исключение.

Пожалуйста, сообщите.

Большое спасибо.

Ответы [ 5 ]

22 голосов
/ 11 июля 2011

Вам не нужно переносить GetNumber () внутри try / catch. Если выдает GetNumber (), ваш тест не пройден.

Если вам требуется явная ошибка, используйте Assert.Fail ();

3 голосов
/ 11 июля 2011

Если GetNumber() возвращает значение, вы не должны делать то, что пытаетесь сделать.Вместо этого вы должны подтвердить возвращаемое значение.Не пытайтесь проверять наличие исключений, если вы не ожидаете их возникновения.Среда NUnit позаботится об этом и провалит ваш тест для вас.

Если GetNumber() не возвращает значение, вы можете сделать одну из трех вещей:

  1. Использование Assert.DoesNotThrow - это очень явно документирует намерение
  2. Как и другие люди предложили, вы можете просто отказаться от исключения.Сбои теста уже сигнализируются исключениями.Любое неперехваченное исключение не пройдёт тест
  3. Если у вас есть веская причина, по которой ваша логика явно провалилась или прошла тест, и у вас нет других блоков утверждений, которые вы могли бы использовать вместо них (которые лучше документируютваш тест), используйте Assert.Fail / Assert.Pass

В этом случае первый вариант является наиболее явным.Это часто встречается, если единственный интересный побочный эффект, который вы можете проверить, - это исключение.Но если GetNumber() не возвращает значение, вам стоит подумать о переименовании вашего метода:)

1 голос
/ 11 июля 2011

Assert.Fail(): http://www.nunit.org/index.php?p=utilityAsserts&r=2.2.7

Хотя, вероятно, есть утверждение Assert.NoThrow или что-то подобное, которое гарантирует, что ваш метод не генерирует.

1 голос
/ 11 июля 2011

Все тесты должны пройти, если вы ожидаете исключения, вы должны использовать атрибут ExpectedException . Если ваш код выдаст ожидаемое исключение, тест пройдет успешно.

0 голосов
/ 22 июля 2015
[Test()]
public void Test( )
{
    GetNumber();
}

Сбой теста эквивалентен выбрасыванию исключения из него.Поэтому, если ваш метод сгенерирует, тест не пройдёт.

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