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测试的原生方法来实现它。似乎在测试时想要隐藏输出应该是很常见的事情。我在上面找不到任何谷歌搜索结果,所以肯定没有。