gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:04:47 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com