我正在使用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/