【问题标题】:C++ boost unit test error messageC++ boost 单元测试错误信息
【发布时间】:2010-01-20 20:08:26
【问题描述】:

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

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?

【问题讨论】:

    标签: c++ unit-testing boost


    【解决方案1】:

    你想要BOOST_REQUIRE_MESSAGE

    您可能还想将它们合并到一个检查中:

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

    【讨论】:

    • Boost 1.40 似乎不允许我将 BOOST_MESSAGE 作为第二个参数(仅是文字字符串)。
    • 糟糕,在不需要时放入 BOOST_MESSAGE。用正确的版本更新了答案。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2015-08-20
      • 1970-01-01
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多