【发布时间】:2011-07-16 13:28:58
【问题描述】:
我有以下代码:
bool f()
{
command = "mkdir -p /\/\/";
result = aSystemCall(command);
if (result == ...
}
BOOST_AUTO_TEST_CASE(BadDir)
{
BOOST_CHECK_EQUAL(false, f());
}
如果我在命令行中执行command,我会收到权限被拒绝错误。我知道这一点。这正是我想要测试的。aSystemCall 将命令作为子进程执行。当子进程以非零错误退出此命令时,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 你期待失败。它报告在测试中检测到失败(预期失败)。我想要一个通过的测试情况。
【问题讨论】:
-
aSystemCall 是返回还是抛出异常?
-
旁注:要检查布尔值,请使用
BOOST_CHECK而不是BOOST_CHECK_EQUAL。更简洁。 -
如果在调试器中测试通过,正常运行测试时什么不起作用?也许提供 Boost.Test 的错误输出。
-
@Arafangion - aSystemCall 生成一个新进程,该进程以非零值退出。但是父进程只是返回一个错误代码。 @Space_C0wb0y - BOOST_CHECK_EQUAL 不会为您提供 false=... 的输出信息吗? @Martin - 我认为 boost 只是抱怨一个子进程以非零代码退出。
标签: c++ unit-testing boost