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