boost :: test中是否有一个函数可以返回错误值?

时间:2014-07-15 11:08:27

标签: c++ unit-testing boost

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是否支持此功能?谢谢。

2 个答案:

答案 0 :(得分:3)

Boost提供了一个宏BOOST_WARN_MESSAGE(以及BOOST_CHECK_MESSAGEBOOST_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);
}