测试时全局抑制c ++ std :: cout

时间:2015-07-17 16:58:13

标签: c++ c++11 iostream

我在数值数据上有一个Struct点,带有一个returnNext()方法,每次调用时都会在stdout中返回AND post。我还有一系列使用这种方法的单元测试:在那些测试中我想要压缩所有Data的std :: cout,这样我只检查返回值的有效性,而不会使屏幕膨胀消息。 e.g。

{{1}}

一个明显的解决方案是使用预编译器标志/命令从TEST构建中排除std :: cout。但这需要编辑几个模块,并且还会使我的代码变得丑陋。

另一种情况是从控制台使用重定向stdout到dev / null,但这也会抑制stdout我的测试模块。

在程序生命周期的特定时刻,是不是有办法以编程方式压缩/重定向stdout ???

2 个答案:

答案 0 :(得分:11)

对于抑制std::cout的一般问题,您可以将std::basic_ios::rdbuf与空缓冲区一起使用:

std::cout.rdbuf(nullptr);

答案 1 :(得分:3)

这正是为什么在你的成员函数中使用硬编码的stdout输出是一个坏主意。现在你认为你必须在全球范围内阻止std::cout,因为你们班级的行为是不灵活的。

相反,将std::cout调用移动到其他位置(以使其可选),或让它成为任意std::ostream,您可以将其移至任何地方。