Перенаправить 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. Я хотел бы что-то, что получает оба. Есть идеи?