2011-10-28 18 views
31

Estoy usando el googletest C++ testing framework. Normalmente la salida textual de la ejecución de una prueba es el siguiente:Impresión de salida adicional en Google Test

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

quisiera salida de algunos datos adicionales en el mismo formato, por ejemplo:

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

he encontrado Logging Additional Information en la documentación googletest pero eso solo parece enviar datos estructurados a la salida XML, no a la salida de la consola estándar.

¿Existe una función googletest a la que pueda llamar dentro de mi unidad de prueba que emita texto en este formato? El envío manual de datos al cout funciona, pero no incluye la salida de color habitual, así que tengo que sangrar explícitamente la salida imprimiendo 13 espacios o lo que sea.

+6

respuesta es útil: http://stackoverflow.com/a/29155677/92957 – Eugene

Respuesta

0

No, buscó a través de los encabezados y no hay nada sobre agregar sus propios registros en el medio. Podría ser algo para pedir. Puede registrar una tarea de mejora si lo desea en http://code.google.com/p/googletest/issues/list

Tenga cuidado.

9

Puede escribir un contenedor para la impresora predeterminada PrettyUnitTestResultPrinter para imprimir también las propiedades de prueba. Puede obtener la impresora predeterminada con listeners.default_result_printer() (consulte a continuación). Usted tendría que poner en práctica EmptyTestEventListener y cambiar el método PrettyUnitTestResultPrinter::OnTestEnd() (in gtest.cc) y utilizar las propiedades resultados: test_info.result()->GetTestProperty(i) como la impresora para la salida 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(); 
} 

A continuación, puede reemplazar la escucha predeterminado para sus pruebas como se hace en el 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

Simplemente imprimir en stderr funcionará en la configuración de prueba predeterminada.

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

Me hizo mención de que en mi pregunta, y la escritura de salida de esta manera hace no incluye la salida de color habitual. –

+2

Eso es genial, pero cout no aparece. – thang

+1

std :: cout tampoco funciona para mí pero std: cerr muestra – user501743

0

acabo utilizado std::cout con la norma ANSI códigos de color en Linux pero creo que los códigos funcionan en Windows desde la actualización victoria 10 aniversario.

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

o simplemente crear un archivo de cabecera y algunas #define declaraciones e incluirla en mis pruebas. También me gusta dar formato al texto para destacar un poco más también.

#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 

Así que mi código sería:

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