gpt4 book ai didi

c++ - boost::unit_test 案例失败,因为子进程以非零值退出

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:40:00 26 4
gpt4 key购买 nike

我有以下代码:

bool f()
{
command = "mkdir -p /\/\/";
result = aSystemCall(command);
if (result == ...
}

BOOST_AUTO_TEST_CASE(BadDir)
{
BOOST_CHECK_EQUAL(false, f());
}

如果我在命令行中执行 command,我会收到权限被拒绝的错误。我知道这一点。这正是我想要测试的。
aSystemCall 将命令作为子进程执行。当 child 退出时出现此命令的非零错误,aSystemCall 返回一个错误。它不会抛出。
如果我在命令行中运行 BadDir 测试用例,aSystemCall 之后的代码永远不会执行,并且测试失败,输出如下:

mkdir: cannot create directory '/\/\/': Permission denied
unknown location(0): fatal error in "BadDir": child has exited; pid: 25356; uid: 19753; exit value: 1
test.cpp(100): last checkpoint
Leaving test case "BadDir"; testing time: 10ms
Leaving test suite "Test"
Leaving test suite "Master Test Suite"

如果我在 gdb 中运行 BadDir 测试用例,aSystemCall 返回,可以检查结果,测试通过。

有没有办法告诉 boost::unit_test 过滤掉像这样的可能错误,以便继续执行?我试过 BOOST_AUTO_TEST_CASE_EXPECTED_FAILURE(blah, 1),但这只是告诉 boost::unit_test 你预计会失败。它报告在测试中检测到故障(预期故障)。我想要一个通过的测试情况。

最佳答案

首先,我只在 Linux 上遇到这种奇怪的行为。

我发现 Boost.Test 使用您选择的部署模型改变了它处理子退出代码的方式。如果您正在使用 boost 库的静态链接或“一体式” header boost/test/included/unit_test.hpp 插入定义:

#define BOOST_TEST_IGNORE_NON_ZERO_CHILD_CODE

在任何 include 指令解决问题之前。

如果您使用动态链接,这还不够。您必须使用命令行选项 "--catch_system_errors=no" 调用生成的测试或定义以下环境变量。

export BOOST_TEST_CATCH_SYSTEM_ERRORS="no"

我在 debian wheezy 上使用 boost 1.52 和 1.57,GCC 4.7.2。

这里是对 deploy models of Boost.Test 的引用

另见这个问题:how-to-cancel-fatal-error-detection-in-boost-test

关于c++ - boost::unit_test 案例失败,因为子进程以非零值退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5325202/

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