c++ - Catch2:测试崩溃,因为封装在REQUIRE_THROWS中的调用引发异常

标签 c++ catch2

我正在使用catch2作为单元测试框架。一个测试用例应该检查函数调用是否导致引发异常,所以我基本上写

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

发生了什么:该函数引发并且测试崩溃。查看调用堆栈,我发现崩溃是由于对我的throwing成员函数的调用中引发的异常而发生的。这里可能会出什么问题,以致引发的异常不会被REQUIRE_THROWS捕获,但会使整个测试崩溃?

编辑:由于这是一个复杂且封闭的源项目,因此我无法构成此问题的最小且可复制的示例。但是,也许有人遇到过类似的错误,并且可以对可能导致这种行为的原因做出假设。

最佳答案

自己找到原因-有点复杂。

如果被测函数分配了内存,则应抛出该异常–这是对永远禁止调用malloc的实时安全函数的测试。为了进行测试,传入的函数激活了基于作用域的malloc检查器,然后分配了内存。 REQUIRE_THROWS也在内部分配内存,由于某些原因,它以这种方式触发了自身。

这只能在发行版本中进行复制,调试版本可以正常运行,这可能是由于将调用函数内联到扩展的catch宏中导致了检测触发了函数体之外的分配。

关于c++ - Catch2:测试崩溃,因为封装在REQUIRE_THROWS中的调用引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60774632/

相关文章:

c++ - 矩阵初始化

类定义中的 c++ friend 类关键字

c++ - 一些涉及类析构函数和删除运算符的内存管理问题?

c++ - 使用 Catch2Farmework 测试我的功能时出现问题

c++ - catch2 单包含在测试中导致 "undefined reference"

C++11/14/17,GCC 7 与 GCC 8 : Name lookup for friend class templates

c++ - 不要在Catch2测试用例中合并生成器

c++ - Catch2 要求异常等于某个值

c++ - Mongoose 网络库 : how to get authenticated user?