我正在努力在单元测试下获取一些遗留代码,并且有时感觉现有程序行为的唯一方法是从控制台输出。将cout和stdout重定向到C++中的字符串进行单元测试
我在网上看到了很多关于如何将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);
}
的问题是,这确实用printf 不捕获输出。我想要得到两样东西。有任何想法吗?
下面的答案都不适合我,你有没有一个工作的例子呢? – rraallvv 2016-03-11 19:56:45