Sto lavorando per ottenere un codice legacy sotto test unitari e talvolta l'unico modo per rilevare un comportamento del programma esistente è l'output della console.Reindirizzare sia cout che stdout su una stringa in C++ per il test dell'unità
Vedo un sacco di esempi online su come reindirizzare lo stdout in un altro file in C++, ma c'è un modo per reindirarlo a un flusso in memoria, quindi i miei test non devono fare affidamento sul disco?
Mi piacerebbe ottenere tutto ciò che il codice legacy invia allo stdout in una stringa std :: :: così posso facilmente trovare l'output.
Modifica
Il codice legacy è così male che gli utenti una miscela di cout << ..
e printf
. Ecco quello che ho finora:
void TestSuite::setUp(void)
{
oldStdoutBuf = std::cout.rdbuf();
std::cout.rdbuf(consoleOutput.rdbuf());
}
void TestSuite::tearDown(void)
{
std::cout.rdbuf(oldStdoutBuf);
}
Il problema è che questo non uscita di cattura utilizzando printf. Mi piacerebbe qualcosa che ottenga entrambi. Qualche idea?
Nessuna delle risposte di seguito ha funzionato per me, ne hai un esempio funzionante? – rraallvv