Я работаю над получением некоторого устаревшего кода в модульных тестах, и иногда единственный способ распознать существующее поведение программы - это вывод консоли.
Я вижу много примеров в Интернете, чтобы перенаправить stdout на другой файл на С++, но есть ли способ перенаправить его на поток в памяти, поэтому мои тесты не должны полагаться на диск?
Я хотел бы получить что-то, что старый код отправляет в stdout в std::string, поэтому я могу легко .find на выходе.
Edit
Устаревший код настолько плохой, что он представляет собой смесь cout << ..
и printf
. Вот что я до сих пор:
void TestSuite::setUp(void)
{
oldStdoutBuf = std::cout.rdbuf();
std::cout.rdbuf(consoleOutput.rdbuf());
}
void TestSuite::tearDown(void)
{
std::cout.rdbuf(oldStdoutBuf);
}
Проблема заключается в том, что это делает не вывод вывода с использованием printf. Я бы хотел, чтобы что-то получило и то, и другое. Любые идеи?