Boost Test Library是一个非常有用的单元测试框架。然而,我感到不舒服的一件事是,在单元测试期间如果发生错误,它将通知用户但不通知程序本身。让我以BOOST_CHECK为例说明我的观点:
i=3;
j=4;
BOOST_CHECK(i==j);
上述测试用例将失败。因此,检查细节以找出测试失败的原因将非常有趣。在这种情况下,如果知道单元测试失败,则需要打印一些变量或执行更复杂的操作,例如将文件写入程序中的磁盘。但是,BOOST_CHECK不会返回值来表示测试是否成功。一个完美的功能应该像这样工作:
i=3;
j=4;
if(Enhanced_BOOST_CHECK(i==j) == failed)
{
// print some internal varaibles.
// or write some data to a file in the disk
}
所以我的问题是:BOOST Test Library是否支持此功能?谢谢。
答案 0 :(得分:3)
Boost提供了一个宏BOOST_WARN_MESSAGE
(以及BOOST_CHECK_MESSAGE
和BOOST_REQUIRE_MESSAGE
)。在你的情况下,它可以像这样使用:
i=3;
j=4;
bool isEqual = i==j;
BOOST_CHECK(isEqual);
BOOST_WARN_MESSAGE(isEqual, "Failure since i = " << i << " and j = " << j);
进一步了解here。
答案 1 :(得分:1)
Boost Test提供的不仅仅是BOOST_CHECK
。
请参阅the docs:
UTF测试工具参考
BOOST_<level> BOOST_<level>_BITWISE_EQUAL BOOST_<level>_CLOSE BOOST_<level>_CLOSE_FRACTION BOOST_<level>_EQUAL BOOST_<level>_EQUAL_COLLECTION BOOST_<level>_EXCEPTION BOOST_<level>_GE BOOST_<level>_GT BOOST_<level>_LE BOOST_<level>_LT BOOST_<level>_MESSAGE BOOST_<level>_NE BOOST_<level>_NO_THROW BOOST_<level>_PREDICATE BOOST_<level>_SMALL BOOST_<level>_THROW BOOST_ERROR BOOST_FAIL BOOST_IS_DEFINED
您可能希望在案例中使用BOOST_CHECK_EQUAL(i, j)
。
或者,看看你的第二个例子,对于更复杂的情况,你可以这样做:
if (!(i==j)) {
// Complex condition failed - report to boost test and add custom message
std::string message = ...;
BOOST_CHECK_MESSAGE(false, message);
}