我正在测试一个返回整数错误代码的函数。我正在使用BOOST_CHECK_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
来运行此测试?提前谢谢。
答案 0 :(得分:1)
一个选项是将返回值保存在变量中,以便在检查前触发副作用:
auto result = foo(a);
BOOST_CHECK_EQUAL(result, 12)
隐藏输出的另一个是将std::cerr
的缓冲区更改为写入dev/null
:
namespace ns {
struct defer_output_wrapper
{
defer_output_wrapper(std::ostream& os) : os(os), sbuf(os.rdbuf())
{
os.rdbuf(null.open("dev/null", std::ios_base::out));
}
~defer_output_wrapper() { os.rdbuf(sbuf); }
private:
std::ostream& os;
std::streambuf* sbuf;
std::filebuf null;
};
}
稍后......
{
ns::defer_output_wrapper _(std::cerr); // Output on std::cerr writes to dev/null
BOOST_CHECK_EQUAL(foo(a), 12)
} // buffer changes back