Перенаправить cout и stdout в строку в C ++ для модульного тестирования

Я работаю над получением некоторого унаследованного кода в модульных тестах, и иногда единственный способ ощутить поведение существующей программы - это вывод консоли.

В Интернете я вижу много примеров того, как перенаправить стандартный вывод в другой файл в C ++, но есть ли способ, которым я могу перенаправить его в поток в памяти, чтобы мои тесты не полагались на диск?

Я хотел бы получить все, что унаследованный код отправляет в stdout, в std :: string, чтобы я мог легко находить результаты.

Edit

Устаревший код настолько плох, что он использует смесьcout << .. а такжеprintf, Вот что у меня так далеко:

void TestSuite::setUp(void)
{
    oldStdoutBuf = std::cout.rdbuf();
    std::cout.rdbuf(consoleOutput.rdbuf());
}
void TestSuite::tearDown(void)
{
    std::cout.rdbuf(oldStdoutBuf);
}

Проблема в том, что это делаетnot захватить вывод с помощью printf. Я хотел бы что-то, что получает оба. Есть идеи?

Ответы на вопрос(4)

Ваш ответ на вопрос