Impression de sortie supplémentaire dans Google Test
j'utilise le googletest C++ framework de test. Normalement, la sortie textuelle d'un test ressemble à ceci:
[ RUN ] MyTest.Fuzz [ OK ] MyTest.Fuzz (1867 ms)
je voudrais afficher des données supplémentaires dans le même format, par exemple:
[ RUN ] MyTest.Fuzz [ ] random seed = 1319760587 [ OK ] MyTest.Fuzz (1867 ms)
j'ai trouvé Journalisation Des Informations Supplémentaires dans la documentation googletest mais qui semble seulement envoyer des données structurées à la sortie XML, pas à la sortie standard de la console.
Est-il googletest fonction que je peux appeler à l'intérieur de mon test d'unité qui produit du texte dans ce format? Envoyer manuellement des données à cout
fonctionne, mais il n'inclut pas la sortie colorée habituelle donc je dois explicitement indenter la sortie en imprimant 13 espaces ou peu importe.
4 réponses
le simple fait d'imprimer sur stderr fonctionnera dans la configuration de test par défaut.
std::cerr << "[ ] random seed = " << random_seed << std::endl;
Vous pourriez écrire un wrapper pour l'imprimante par défaut PrettyUnitTestResultPrinter
pour imprimer tester les propriétés. Vous pouvez obtenir de l'imprimante par défaut listeners.default_result_printer()
(voir ci-dessous). Pour la mise en œuvre EmptyTestEventListener
et changez la méthode PrettyUnitTestResultPrinter::OnTestEnd()
(dans gtest.cc) et utiliser les propriétés des résultats: test_info.result()->GetTestProperty(i)
comme l'imprimante pour une sortie 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();
}
alors vous pouvez remplacer l'écouteur par défaut pour vos tests comme il est fait dans le google échantillon de test:
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();
Non, cherché à travers les en-têtes et il n'y a rien à ajouter vos propres rondins au milieu. Peut-être quelque chose à demander. Vous pouvez enregistrer une tâche d'amélioration si vous voulezhttp://code.google.com/p/googletest/issues/list
prenez soin de vous.
j'ai juste utilisé std::cout
avec les couleurs ansi codes linux mais je crois que les codes fonctionnent sous windows depuis win 10 anniversary update.
std:cout << "3[0;32m" << "[ ] " << "3[0;0m"
<< "random seed = " << random_seed << lend;
ou tout simplement créer un fichier d'en-tête et certains #define
déclarations et l'inclure dans mes tests. J'aime aussi formater le texte pour en ressortir un peu plus.
#define ANSI_TXT_GRN "3[0;32m"
#define ANSI_TXT_MGT "3[0;35m" //Magenta
#define ANSI_TXT_DFT "3[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
Donc mon code:
cout << COUT_GTEST_MGT << "random seed = " << random_seed << ANSI_TXT_DFT << endl;