Подтвердить что ты не робот

NUnit: тест без ожидаемого исключения

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

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

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

4b9b3361

Ответ 1

Assert.DoesNotThrow(() => { /* custom code block here*/});

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

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

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

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

Assert.DoesNotThrow

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

Ответ 6

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

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