在Google Test中打印其他输出

时间:2011-10-28 00:16:00

标签: c++ googletest

我正在使用googletest C++ testing framework。通常,运行测试的文本输出如下所示:

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

我想以相同的格式输出一些额外的数据,例如:

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

我在googletest文档中找到Logging Additional Information,但似乎只将结构化数据发送到XML输出,而不是标准控制台输出。

我可以在我的单元测试中调用googletest函数,以这种格式输出文本吗?手动将数据发送到cout有效,但它不包括通常的彩色输出,所以我必须通过打印13个空格或其他来明确缩进输出。

5 个答案:

答案 0 :(得分:18)

只需打印到stderr即可使用默认测试配置。

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

答案 1 :(得分:12)

您可以为默认打印机PrettyUnitTestResultPrinter编写一个包装器,以打印出测试属性。您可以使用listeners.default_result_printer()获取默认打印机(参见下文)。您必须实现EmptyTestEventListener并更改方法PrettyUnitTestResultPrinter::OnTestEnd()in 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();

答案 2 :(得分:1)

以下工作,如果您保存在 .cmd 文件中然后运行它

https://gist.githubusercontent.com/mlocati/fdabcaeb8071d5c75a2d51712db24011/raw/b710612d6320df7e146508094e84b92b34c77d48/win10colors.cmd

代码示例:

@echo off
cls
echo [101;93m STYLES [0m
echo ^<ESC^>[0m [0mReset[0m
echo ^<ESC^>[1m [1mBold[0m
echo ^<ESC^>[4m [4mUnderline[0m
echo ^<ESC^>[7m [7mInverse[0m
echo.

enter image description here

答案 3 :(得分:0)

不,通过标题搜索,没有任何关于在中间添加自己的日志。可能是要求的东西。如果您想要http://code.google.com/p/googletest/issues/list

,可以记录增强任务

小心。

答案 4 :(得分:0)

我刚刚在 linux 中使用了std::cout和ansi颜色代码,但我相信自从赢得10周年更新以来,这些代码在Windows中运行。

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;