Сообщение об ошибке тестового модуля C ++ boost - PullRequest
1 голос
/ 20 января 2010

Я хотел бы написать метод в моем наборе тестов следующим образом:

void checkParams(arg1, arg2, arg3)
{
BOOST_REQUIRE(arg1==1);
BOOST_REQUIRE(arg2==2);
BOOST_REQUIRE(arg3==3);

}

Тем не менее, я хочу написать что-то в stderr, если утверждение не удалось. Например, если первое утверждение не удается, я хочу написать: Ошибка checkParams с аргументами arg1 = 5, arg2 = 4, arg3 = 3

Напишите теперь сообщение, которое оно генерирует, только что критическая проверка не удалась 5 == 1.

В целом, я хотел бы создать трассировку стека при сбое, чтобы я мог видеть цепочку звонков, которые привели к этой неудаче. Обратите внимание, что этот метод вызывается всеми моими BOOST_AUTO_TEST_CASE методы, но сам по себе не является BOOST_AUTO_TEST_CASE.

Как мне это сделать?

Еще один вопрос: я знаю, что могу изменить уровень ведения журнала, предоставив параметры времени выполнения,

./test --log_level=all

Как установить уровень log_level в коде?

Ответы [ 2 ]

2 голосов
/ 21 января 2010

Я бы использовал BOOST_CHECK или BOOST_CHECK_EQUAL перед BOOST_REQUIRE. BOOST_CHECK просто сообщает об ошибке и продолжает, поэтому тест не пройден, но вы видите все неправильные значения.

Если вы хотите принудительно остановить тест, используйте BOOST_REQUIRE впоследствии.

void checkParams(arg1, arg2, arg3)
{
    BOOST_CHECK_EQUAL(1, arg1);
    BOOST_CHECK_EQUAL(2, arg2);
    BOOST_CHECK_EQUAL(3, arg3);

    BOOST_REQUIRE(arg1==1 && arg2==2 && arg3==3);
}
2 голосов
/ 20 января 2010

Вы хотите BOOST_REQUIRE_MESSAGE .

Вы также, вероятно, хотите объединить их в одну проверку:

BOOST_REQUIRE_MESSAGE((arg1 == 1) && (arg2 == 2) && (arg3 = 3),
   "failed with arg1=" << arg1 << " arg2=" << arg2 << " arg3= " << arg3);
...