Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.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++ 在升压检查期间隐藏cerr输出_C++_Unit Testing_Boost_Boost Test - Fatal编程技术网

C++ 在升压检查期间隐藏cerr输出

C++ 在升压检查期间隐藏cerr输出,c++,unit-testing,boost,boost-test,C++,Unit Testing,Boost,Boost Test,我正在测试一个返回整数错误代码的函数。我正在使用BOOST\u CHECK\u EQUAL将函数返回值与错误代码进行比较。与此类似: BOOST_CHECK_EQUAL( foo(a), 12 ) // where 12 is an error code 函数foo中有一个cerr语句,该语句将在返回错误代码之前触发。有没有办法隐藏错误消息?目前,我的输出内容如下: Running 7 test cases... Error in foo() *** No errors detected

我正在测试一个返回整数错误代码的函数。我正在使用
BOOST\u CHECK\u EQUAL
将函数返回值与错误代码进行比较。与此类似:

BOOST_CHECK_EQUAL( foo(a), 12 ) // where 12 is an error code
函数
foo
中有一个
cerr
语句,该语句将在返回错误代码之前触发。有没有办法隐藏错误消息?目前,我的输出内容如下:

Running 7 test cases...
Error in foo()

*** No errors detected
但是我想要

Running 7 test cases...

*** No Errors detected

有没有一种方法可以在一个测试上运行与
2>/dev/null
等效的测试?提前感谢。

一个选项是将返回值保存在变量中,以便在检查之前触发副作用:

auto result = foo(a);
BOOST_CHECK_EQUAL(result, 12)
另一个隐藏输出的方法是将
std::cerr
的缓冲区更改为写入
dev/null

ns{
结构延迟输出包装器
{
延迟输出包装器(std::ostream&os):os(os)、sbuf(os.rdbuf())
{
rdbuf(null.open(“dev/null”,std::ios_base::out));
}
~defer_output_wrapper(){os.rdbuf(sbuf);}
私人:
std::ostream&os;
标准::streambuf*sbuf;
std::filebuf null;
};
}
后来

{
ns::defer_output_wrapper(std::cerr);//std::cerr上的输出写入dev/null
增压检查相等(foo(a),12)
}//缓冲区更改回

我不想让错误显示出来,所以第一个建议不太管用。(这是一个非常大的程序,有很多测试用例,成功时我不需要输出。)我可以使用您的第二个解决方案,因为我使用的是记录器,可以在检查之前更改输出优先级,然后在检查之后恢复。我只是想知道是否有一种boost测试的原生方法来实现它。似乎在测试时想要隐藏输出应该是很常见的事情。我在上面找不到任何谷歌搜索结果,所以肯定没有。