私は単体テストでいくつかのレガシーコードを取得することに取り組んでおり、既存のプログラムの動作を感知する唯一の方法はコンソール出力からです。
C++ で stdout を別のファイルにリダイレクトする方法についてオンラインで多くの例を目にしますが、テストがディスクに依存する必要がないようにメモリ内ストリームにリダイレクトする方法はありますか?
レガシ コードが 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 を使用して出力をキャプチャしないことです。両方を兼ね備えたものが欲しい。何か案は?