Печать дополнительного вывода в Google Test - PullRequest
43 голосов
/ 28 октября 2011

Я использую googletest C ++ для тестирования .Обычно текстовый вывод выполнения теста выглядит следующим образом:

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

Я хотел бы вывести некоторые дополнительные данные в том же формате, например:

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

Я нашел Регистрация дополнительной информации в документации googletest, но, похоже, она отправляет только структурированные данные в вывод XML, а не в стандартный вывод консоли.

Есть ли в моем модульном тесте функция googletest, которуювыводит текст в этом формате?Ручная отправка данных в cout работает, но она не включает в себя обычный цветной вывод, поэтому я должен явно сделать отступ, напечатав 13 пробелов или что-то еще.

Ответы [ 4 ]

19 голосов
/ 27 января 2014

Простая печать в stderr будет работать в тестовой конфигурации по умолчанию.

std::cerr << "[          ] random seed = " << random_seed << std::endl;
12 голосов
/ 17 апреля 2012

Вы можете написать оболочку для принтера по умолчанию PrettyUnitTestResultPrinter, чтобы также распечатать тестовые свойства.Вы можете получить принтер по умолчанию с listeners.default_result_printer() (см. Ниже).Вам нужно будет реализовать EmptyTestEventListener и изменить метод PrettyUnitTestResultPrinter::OnTestEnd() ( в gtest.cc ) и использовать свойства результатов: test_info.result()->GetTestProperty(i) как принтер для вывода 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();
}

Затем вы можете заменить прослушиватель по умолчанию для ваших тестов, как это делается в 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();
0 голосов
/ 03 декабря 2017

Я только что использовал std::cout с цветовыми кодами ANSI в Linux , но я считаю, что коды работают в Windows, так как победа 10 лет юбилей обновления.

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

или просто создайте файл заголовка и несколько #define операторов и включите его в мои тесты. Мне также нравится форматировать текст так, чтобы он выглядел немного больше.

#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

Так что мой код будет:

cout << COUT_GTEST_MGT << "random seed = " << random_seed << ANSI_TXT_DFT << endl;
0 голосов
/ 10 ноября 2011

Нет, просматривал заголовки, и нет ничего о добавлении ваших собственных журналов в середине.Может быть что-то просить.Вы можете зарегистрировать задачу улучшения, если хотите, на http://code.google.com/p/googletest/issues/list

Берегите себя.

...