我正在努力在單元測試下獲取一些遺留代碼,並且有時感覺現有程序行爲的唯一方法是從控制檯輸出。將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