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;
No, busca en los encabezados y no hay nada sobre agregar tus 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
Cuídate.
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;