Точка REQUIRE_NOTHROW в инфраструктуре тестирования catch C++

Какой смысл REQUIRE_NOTHROW утверждение? Если я просто помещу оператор и не заключу его в какой-либо макрос утверждения, он потерпит неудачу, если он все равно выдаст?

1 ответ

Решение

Это разница между ошибкой TEST_CASE и ошибкой отдельного утверждения. Макросы REQUIRE гарантируют, что следующие строки не будут выполнены, если они потерпят неудачу. И наоборот, макросы CHECK могут пометить контрольный пример как неудачный, но продолжить.

Рассмотрим этот пример:

REQUIRE_NOTHROW(parseInput(validInput));
REQUIRE_THROWS(parseInput(errorInput));
REQUIRE_THROWS(parseInput(NULL));

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

Другие вопросы по тегам