serp online google description check c++ googletest

c++ - online - Impresión de resultados adicionales en Google Test



check meta description online (4)

Estoy usando el marco de prueba googletest C ++ . Normalmente, el resultado textual de ejecutar una prueba es el siguiente:

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

Me gustaría generar algunos datos adicionales en el mismo formato, por ejemplo:

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

Encontré información adicional sobre el registro en la documentación de googletest, pero parece que solo envía datos estructurados a la salida XML, no a la salida de la consola estándar.

¿Hay una función googletest a la que pueda llamar dentro de mi prueba unitaria que emita texto en este formato? Enviar manualmente datos a 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.


Acabo de utilizar std::cout con códigos de color ansi en linux, pero creo que los códigos funcionan en Windows desde la actualización de win 10 anniversary.

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

o simplemente crea un archivo de cabecera y algunas declaraciones #define e inclúyelo 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

Entonces mi código sería:

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



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() (ver a continuación). EmptyTestEventListener implementar EmptyTestEventListener y cambiar el método PrettyUnitTestResultPrinter::OnTestEnd() ( en gtest.cc ) y usar las propiedades de 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(); }

Luego puede reemplazar el oyente predeterminado para sus pruebas como lo hizo en la muestra de prueba de Google :

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();


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

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