Catch2: тест завершается сбоем, потому что вызов, инкапсулированный в REQUIRE_THROWS, вызывает исключение - PullRequest
0 голосов
/ 20 марта 2020

Я использую catch2 в качестве основы для модульного тестирования. Один тест должен проверить, приводит ли вызов функции к возникновению исключения, поэтому я в основном пишу

REQUIRE_THROWS (class.throwingFun (arg1, arg2));

Что происходит: функция выдает и тест завершается неудачей. Глядя на стек вызовов, я вижу, что cra sh происходит из-за исключения, сгенерированного в вызове моей функции-члена throwing. Что может go ошибиться здесь, чтобы выброшенное исключение не было перехвачено REQUIRE_THROWS, а завершило весь тест?

Редактировать: Поскольку это сложный проект с закрытым исходным кодом, я не могу составить минимальный и воспроизводимый пример этого вопроса. Однако, возможно, кто-то столкнулся с подобной ошибкой и мог бы предположить, что может вызвать такое поведение.

1 Ответ

0 голосов
/ 20 марта 2020

Сам нашел причину - немного сложно.

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

Это может быть воспроизведено только в сборке релиза, отладочная сборка работала нормально, возможно, из-за встраивания вызываемой функции в расширенный макрос catch которые приводят к обнаружению, чтобы инициировать распределение вне тела функции.

...