Ответ 1
Просто печать на stdout будет работать в конфигурации тестирования по умолчанию.
std::cerr << "[ ] random seed = " << random_seed << std::endl;
Я использую 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 пробелов или что-то еще.
Просто печать на stdout будет работать в конфигурации тестирования по умолчанию.
std::cerr << "[ ] random seed = " << random_seed << std::endl;
Вы можете написать оболочку для принтера по умолчанию 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();
Нет, просмотрите заголовки, и нет ничего о том, как добавить свои собственные журналы в середине. Может быть, что-то запросить. Вы можете записать задачу улучшения, если хотите http://code.google.com/p/googletest/issues/list
Позаботьтесь.
Я только что использовал 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;