【发布时间】:2015-07-17 16:58:13
【问题描述】:
我在数值数据上有一个 Struct 点,它带有一个 returnNext() 方法,该方法在每次调用时返回并在 stdout 中发布下一个数据。我也有一系列使用这种方法的单元测试:在这些测试中,我想抑制所有 Data 的 std::cout,这样我只检查返回值的有效性,而不会使屏幕因消息而膨胀。例如
struct Data {
Data(int n): datum{n} {};
int datum;
int returnNext() {
std::cout << datum << " returned" << std::endl;
return datum;
}
}
// main.cpp
int main() {
Data d{100};
d.returnNext(); // I want this to print at the screen
return 0;
}
// test.cpp
int main() {
TEST( ... ) {
Data d{100};
ASSERT_THAT(d.returnNext(), 100); // I want just to check the output, not to check
}
std::cout << "some message" << std::endl; // I want this printed
return 0;
}
一个明显的解决方案是使用预编译器标志/命令从 TEST 构建中排除 std::cout。但这需要编辑几个模块,也会让我的代码变得丑陋。
另一种情况是从控制台使用重定向标准输出到 dev/null,但这也会抑制标准输出我的测试模块。
难道没有办法在程序生命周期的特定时刻以编程方式抑制/重定向标准输出???
【问题讨论】:
-
您可以使用不同精度级别的记录器,并在运行时选择要打印的内容。
-
您可以创建具有各种详细级别的日志流类。
-
为什么不使用
/dev/null? -
有人知道-1是干什么用的吗?对我来说似乎是个好问题:)