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