Я работаю над получением устаревшего кода в модульных тестах, и иногда единственный способ почувствовать поведение существующей программы - это вывод консоли.
Я вижу много примеров в Интернете, как перенаправить стандартный вывод в другой файл в 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. Я хотел бы что-то, что получает оба. Есть идеи?