C ++ boost unit测试错误消息

时间:2010-01-20 20:08:27

标签: c++ unit-testing boost

我想在我的测试套件中编写一个方法 如下:

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

}

但是,如果断言失败,我想写一些东西给stderr。例如, 如果第一个断言失败,我想写: 参数arg1 = 5,arg2 = 4,arg3 = 3

,checkParams失败

现在写下它生成的消息只是关键检查失败5 == 1.

更一般地说,我想在失败时创建一个堆栈跟踪,以便我可以看到一个链 导致此失败的电话。请注意,我的所有BOOST_AUTO_TEST_CASE都会调用此方法 方法,但本身不是BOOST_AUTO_TEST_CASE。

我该怎么做?

另一个问题:我知道我可以通过提供运行时参数来修改日志记录级别,

./test --log_level=all

如何在代码中设置log_level?

2 个答案:

答案 0 :(得分:2)

你想要BOOST_REQUIRE_MESSAGE

您可能还想将这些合并到一张支票中:

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

答案 1 :(得分:2)

我会在BOOST_CHECK之前使用BOOST_CHECK_EQUALBOOST_REQUIREBOOST_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);
}