我正在努力在单元测试下获取一些遗留代码,有时感知现有程序行为的唯一方法是从控制台输出。
我在网上看到很多关于如何将标准输出重定向到 C++ 中的另一个文件的示例,但是有没有办法可以将它重定向到内存中的流,这样我的测试就不必依赖磁盘了?
我想将遗留代码发送到 stdout 的任何内容放入 std::string 中,这样我就可以轻松地 .find 输出。
编辑
遗留代码非常糟糕,以至于它用户混合使用cout << ..
和printf
. 这是我到目前为止所拥有的:
void TestSuite::setUp(void)
{
oldStdoutBuf = std::cout.rdbuf();
std::cout.rdbuf(consoleOutput.rdbuf());
}
void TestSuite::tearDown(void)
{
std::cout.rdbuf(oldStdoutBuf);
}
问题是这不会使用printf 捕获输出。我想要两者兼得的东西。有任何想法吗?