我得到一个错误:unknown location(0): fatal error in "suite_1_test_1": child has exited; pid: 5817; uid: 0; exit value: 255
在suite_1_test_1内部,我使用execvp() (在fork()之后)运行程序A,它可能会退出,错误代码不是0。此错误代码指示程序A发生了什么情况。
问题是,如果我得到这个fatal error,我就不能处理exit()值,BOOST TEST就会立即退出。
我能不能把它关掉一会儿?
谢谢
发布于 2013-04-21 21:00:47
嗯,这样做是可能的:
boost::unit_test case fails because a child process exits with nonzero
只需在main()中的#define BOOST_TEST_MODULE aot_test_module之前执行#define BOOST_TEST_IGNORE_NON_ZERO_CHILD_CODE即可
使用共享库时,请使用命令行选项--catch_system_errors=no或export BOOST_TEST_CATCH_SYSTEM_ERRORS=“no”运行。
发布于 2013-04-18 21:14:58
似乎boost寄存器向处理程序或其他东西发出信号,它们仍然会从forked (和被覆盖的)进程中捕获错误。您将很难将测试框架与该子进程“脱钩”。
但是,单元测试框架很少与子进程的生成一起使用,所以我不会在Boost.Test中使用fork和exec*。将这些调用从您正在测试的单元中剔除。毕竟,进程不是一个单一的单元,它更多的是一个完整的组件。我猜您不会有太多这样的子流程,所以测试这些流程与其他框架或简单脚本的协作应该不会有太大影响。
发布于 2013-04-18 21:03:57
据我所知,execvp() replaces你的测试程序。所以Boost.Test不再运行了。它只在失败的情况下返回。我不会在Boost.Test的上下文中使用它。
https://stackoverflow.com/questions/16083323
复制相似问题