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.

37
demandé sur Peter M 2011-10-28 04:16:00

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;
15
répondu Martin Nowak 2018-01-04 11:45:20

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();
10
répondu kossmoboleat 2012-04-17 11:06:02

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.

0
répondu Captain Charmi 2011-11-10 19:19:42

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;
0
répondu Lee 2017-12-03 01:26:09