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