2011-10-28 7 views
31

Sto utilizzando il googletest C++ testing framework. Normalmente l'output testuale di esecuzione di un test simile a questa:Stampa di output aggiuntivo in Google Test

 
[ RUN  ] MyTest.Fuzz 
[  OK ] MyTest.Fuzz (1867 ms) 

Vorrei uscita alcuni dati aggiuntivi nello stesso formato, ad esempio:

 
[ RUN  ] MyTest.Fuzz 
[   ] random seed = 1319760587 
[  OK ] MyTest.Fuzz (1867 ms) 

ho trovato Logging Additional Information nella documentazione googletest ma sembra che solo inviare dati strutturati all'output XML, non all'output della console standard.

C'è una funzione googletest che posso chiamare all'interno del mio test dell'unità che emette il testo in questo formato? L'invio manuale dei dati a cout funziona, ma non include il solito output a colori, quindi devo indentare esplicitamente l'output stampando 13 spazi o altro.

+6

risposta utile: http://stackoverflow.com/a/29155677/92957 – Eugene

risposta

0

No, ha cercato tra le intestazioni e non c'è nulla nell'aggiungere i propri registri nel mezzo. Potrebbe essere qualcosa da richiedere. È possibile registrare un'attività di miglioramento se lo si desidera a http://code.google.com/p/googletest/issues/list

Fare attenzione.

9

È possibile scrivere un wrapper per la stampante predefinita PrettyUnitTestResultPrinter per stampare anche le proprietà di test. È possibile ottenere la stampante predefinita con listeners.default_result_printer() (vedere di seguito). Si dovrà implementare EmptyTestEventListener e cambiare il metodo di PrettyUnitTestResultPrinter::OnTestEnd() (in gtest.cc) e utilizzare le proprietà dei risultati: test_info.result()->GetTestProperty(i) come la stampante per l'output XML:

String XmlUnitTestResultPrinter::TestPropertiesAsXmlAttributes(
    const TestResult& result) { 
    Message attributes; 
    for (int i = 0; i < result.test_property_count(); ++i) { 
    const TestProperty& property = result.GetTestProperty(i); 
    attributes << " " << property.key() << "=" 
     << "\"" << EscapeXmlAttribute(property.value()) << "\""; 
    } 
    return attributes.GetString(); 
} 

Quindi è possibile sostituire l'ascoltatore di default per i test, come si fa nel google test sample:

UnitTest& unit_test = *UnitTest::GetInstance(); 
if (terse_output) { 
    TestEventListeners& listeners = unit_test.listeners(); 
    delete listeners.Release(listeners.default_result_printer()); 
    listeners.Append(new TersePrinter); 
} 
int ret_val = RUN_ALL_TESTS(); 
11

Semplicemente la stampa su stderr funzionerà nella configurazione di test predefinita.

std::cerr << "[   ] random seed = " << random_seed << std::endl; 
+1

Ho fatto menzione che nella mia interrogazione, e la scrittura di uscita in questo modo fa non includere la solita uscita colorata. –

+2

È grandioso ma cout non si presenta. – thang

+1

std :: cout non funziona neanche per me ma std: cerr mostra – user501743

0

ho appena usato std::cout con ANSI codici di colore in linux ma credo che i codici di funzionare in Windows dal aggiornamento vittoria 10 ° anniversario.

std:cout << "\033[0;32m" << "[   ] " << "\033[0;0m" 
<< "random seed = " << random_seed << lend; 

o semplicemente creare un file di intestazione e alcuni #define dichiarazioni e includerlo nel mio test. Mi piace anche formattare il testo per far risaltare un po 'di più.

#define ANSI_TXT_GRN "\033[0;32m" 
#define ANSI_TXT_MGT "\033[0;35m" //Magenta 
#define ANSI_TXT_DFT "\033[0;0m" //Console default 
#define GTEST_BOX "[  cout ] " 
#define COUT_GTEST ANSI_TXT_GRN << GTEST_BOX //You could add the Default 
#define COUT_GTEST_MGT COUT_GTEST << ANSI_TXT_MGT 

Quindi il mio codice sarebbe:

cout << COUT_GTEST_MGT << "random seed = " << random_seed << ANSI_TXT_DFT << endl;