Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ boost::test中是否有可以返回错误值的函数?_C++_Unit Testing_Boost - Fatal编程技术网

C++ boost::test中是否有可以返回错误值的函数?

C++ boost::test中是否有可以返回错误值的函数?,c++,unit-testing,boost,C++,Unit Testing,Boost,Boost测试库是一个非常有用的单元测试框架。然而,我感到不舒服的一件事是,在单元测试期间,如果发生错误,它将通知用户,而不是程序本身。让我以BOOST_CHECK为例说明我的观点: i=3; j=4; BOOST_CHECK(i==j); 上述测试用例将失败。因此,检查细节以找出此测试失败的原因将非常有趣。在这种情况下,如果知道单元测试失败,则需要打印一些变量或执行更复杂的操作,例如将文件写入程序中的磁盘。但是,BOOST_CHECK不会返回表示测试成功与否的值。一个完美的函数应该是这样工作

Boost测试库是一个非常有用的单元测试框架。然而,我感到不舒服的一件事是,在单元测试期间,如果发生错误,它将通知用户,而不是程序本身。让我以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
     }
i=3;
j=4;

bool isEqual = i==j;

BOOST_CHECK(isEqual);
BOOST_WARN_MESSAGE(isEqual, "Failure since i = " << i << " and j = " << j);

所以我的问题是:BOOST测试库是否支持此功能?谢谢

Boost测试提供的不仅仅是
Boost\u检查

见:

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提供宏
Boost\u WARN\u MESSAGE
(以及
Boost\u CHECK\u MESSAGE
Boost\u REQUIRE\u MESSAGE
)。在您的情况下,它可以这样使用:

    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
     }
i=3;
j=4;

bool isEqual = i==j;

BOOST_CHECK(isEqual);
BOOST_WARN_MESSAGE(isEqual, "Failure since i = " << i << " and j = " << j);
i=3;
j=4;
bool-isEqual=i==j;
增压检查(等质量);

BOOST\u WARN\u消息(isEqual,“自i=以来失败”感谢您的评论。按照您的建议,使用BOOST_WARN_消息打印变量可能就足够了。但是,如果我想执行更复杂的任务,例如在测试失败时将文件写入磁盘,该怎么办?我正在为此使用一种解决方法:测试可执行文件的任何输出都将重定向到文件。这一切都封装在batc中h文件(操作系统是Win7)。这样的事情对你来说也足够了吗?很好的解决方案,但有时它会起作用。但是如果我应该将图像写入文件呢?@feelfree在执行单元测试代码IMHO时不应该将图像写入文件。这会减慢测试速度。另一方面,boost文档读取“消息参数可以由支持std::ostream&运算符的任何类型的组件构成