Точка 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()
макрос, тогда тест провалится, но тогда нам нужно будет расшифровать, где он провалился - исключение могло бы прийти из других строк тестового кода.