如何取消BOOST TEST中的“致命错误”检测

时间:2013-04-18 12:44:35

标签: c++ boost-test

我收到错误: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会立即退出。

我能以某种方式暂时关闭它吗?

由于

3 个答案:

答案 0 :(得分:2)

嗯,有可能这样做:

boost::unit_test case fails because a child process exits with nonzero

只是这样做 #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”运行。

答案 1 :(得分:1)

似乎boost注册信号处理程序或其他东西,仍然会从分叉(和重写)进程中捕获错误。您将很难从该子进程中“解开”测试框架。

但是,单元测试框架很少与子进程的产生一起使用,所以我不会在Boost.Test中使用fork和exec *。将这些调用从您正在测试的单元中调出。毕竟,一个过程不是一个单元,它更像是一个整体。我猜你不会有很多子进程,所以测试这些进程与另一个框架或简单脚本的协作不应该太多。

答案 2 :(得分:0)

据我了解execvp()replaces您的测试程序。所以Boost.Test不再运行了。它只在失败的情况下返回。我不会在这个上下文中使用Boost.Test。