Подтвердить что ты не робот

Печать дополнительного вывода в Google Test

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

Вы можете написать оболочку для принтера по умолчанию 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:

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

Ответ 3

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

Позаботьтесь.

Ответ 4

Я только что использовал 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;