Тест без ожидаемого исключения - PullRequest
58 голосов
/ 21 марта 2012

Я хочу создать тест NUnit, чтобы убедиться, что моя функция не выдает исключение. Есть какой-то конкретный способ сделать это, или я должен просто написать

[Test]
public void noExceptionTest() {
  testedFunction();
}

и это будет успешно, если не будет выброшено исключение?

Ответы [ 6 ]

95 голосов
/ 21 марта 2012
Assert.DoesNotThrow(() => { /* custom code block here*/});

ИЛИ просто метод

Assert.DoesNotThrow(() => CallMymethod());

Подробнее см. NUnit Exception Asserts

24 голосов
/ 24 октября 2016

При использовании NUnit 3.0 Модель ограничений утверждения типа, код будет выглядеть следующим образом:

Assert.That(() => SomeMethod(actual), Throws.Nothing);

Этот пример взят из NUnit wiki .

6 голосов
/ 21 марта 2012

Не выбрасывать исключение - это нормальный ход действий. Ваш тест успешно подтвердит, что исключение не выдано.

2 голосов
/ 21 марта 2012

Вы правы.Если есть исключение, то тест не пройден.

Если вы не укажете

[ExpectedException( typeof(YourException) ) ]
public void TestMethod()
{ 
   ...
}

или, как говорит @sll, вы используете более конкретный

Assert.DoesNotThrow

утверждение .

1 голос
/ 21 марта 2012

Я думаю, что есть проблема, связанная с логикой модульного теста. Если вы ожидаете конкретного исключения при определенных входных данных, вы объявляете его как ожидаемое исключение. Если вы просто проверяете, правильно ли работает ваша функция и не ожидается никаких исключений во время этого правильного поведения, вы просто пишете ее и, если она выдает какое-либо исключение, ваш тест не пройден.

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

1 голос
/ 21 марта 2012

Да, не выдается исключений -> Пройти тест.Если был блок try-catch без повторного броска, он тоже пройдет.

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