gpt4 book ai didi

c++ - 在 BOOST_CHECK_EQUAL 期间隐藏 cerr 输出

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:30 27 4
gpt4 key购买 nike

我正在测试一个返回整数错误代码的函数。我正在使用 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 的方法来运行这个测试?提前致谢。

最佳答案

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

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

关于c++ - 在 BOOST_CHECK_EQUAL 期间隐藏 cerr 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24618567/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com