У меня есть следующий код:
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"
Если я запускаю BadDir
контрольный пример в GDB, aSystemCall
возвращает, результат может быть проверен, и тест проходит.
Есть ли способ заставить boost :: unit_test отфильтровывать возможные ошибки, подобные этой, чтобы выполнение могло продолжаться? Я пробовал BOOST_AUTO_TEST_CASE_EXPECTED_FAILURE(blah, 1)
, но это просто для того, чтобы сказать boost :: unit_test, что вы ожидаете сбой. Он сообщает об обнаруженном сбое (ожидаемый сбой) в тесте. Вместо этого я хотел бы пройти тестовую ситуацию.