2010-01-20 50 views
1

我想編寫一個方法在我的測試套件 如下:C++壓單元測試的錯誤消息

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

你想要BOOST_REQUIRE_MESSAGE

你也可能要合併這些到一個單一的檢查:

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

Boost 1.40似乎不允許我將BOOST_MESSAGE 作爲第二個參數(只是一個文字字符串)。 – user231536 2010-01-20 20:46:10

+0

糟糕,當不需要時,放入BOOST_MESSAGE。用正確的版本更新答案。 – 2010-01-20 22:40:08

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); 
}