如何在升压测试中取消"fatal error"检测

How to cancel "fatal error" detection in BOOST TEST

本文关键字:取消 fatal error 检测 测试      更新时间:2023-10-16

我得到一个错误:unknown location(0): fatal error in "suite_1_test_1": child has exited; pid: 5817; uid: 0; exit value: 255

suite_1_test_1里面,我运行一个程序Aexecvp()(在fork()之后),它可能会退出,错误代码不是0。这个错误代码表明程序A发生了什么。

问题是,如果我得到这个fatal error,我不能处理exit()的值,BOOST TEST立即得到。

我能把它关掉一会儿吗?

谢谢

嗯,这是可能的:

boost::unit_test用例失败,因为子进程退出时带有非零

来做#define BOOST_TEST_IGNORE_NON_ZERO_CHILD_CODE之前#define BOOST_TEST_MODULE aot_test_modulemain()

当使用共享库时,使用命令行选项--catch_system_errors=noexport BOOST_TEST_CATCH_SYSTEM_ERRORS=“no”运行

似乎boost寄存器信号处理程序或其他东西,仍然从分叉(和覆盖)进程捕获错误。您将很难将测试框架从子进程中"解挂钩"。

但是,单元测试框架很少与子进程的生成一起使用,所以我不会在Boost.Test中使用fork和exec*。将这些调用从您正在测试的单元中剔除。毕竟,流程不是一个单独的单元,它更像是一个完整的组件。我猜您不会有很多这样的子流程,所以用另一个框架或一个简单的脚本测试这些流程的协作应该不会造成太大的伤害。

据我所知,execvp()取代了您的测试程序。因此提高。测试不再运行。它只在失败的情况下返回。我不会在Boost.Test的上下文中使用它。