在Google Test中打印其他输出

Gre*_*ill 45 c++ googletest

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

[ 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个空格或其他来明确缩进输出.

Mar*_*wak 19

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

std::cerr << "[          ] random seed = " << random_seed << std::endl;
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用,输出到 `std::cerr` 仍然不显示。 (13认同)
  • 这很好但是cout没有出现. (7认同)
  • 不应该是`std :: cerr`而不是`std:cerr`? (4认同)
  • 我确实在我的问题中提到过,并且以这种方式编写输出不包括通常的彩色输出. (2认同)
  • 确认这似乎不起作用。 (2认同)

hfr*_*ile 19

在 gTest 中打印附加输出也可能是这样的:

  EXPECT_NE(result1, result2)
      << "currentTime: " << formattedTime << std::endl
      << "  addinfo1: " << addinfo1 << std::endl
      << "  addinfo2: " << addinfo2 << std::endl;
Run Code Online (Sandbox Code Playgroud)

std::coutstd::cerr在 gTest 中不起作用。

  • 更好的是,仅当期望失败时才会打印添加的行。好的! (2认同)

kos*_*eat 12

您可以为默认打印机编写包装器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();
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以替换测试的默认侦听器,就像在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();
Run Code Online (Sandbox Code Playgroud)


Cap*_*rmi 6

不,搜索了标题,没有在中间添加您自己的日志。可能有什么要求。如果需要,您可以在http://code.google.com/p/googletest/issues/list记录增强任务

小心。


Lee*_*Lee 5

我刚刚在Linuxstd::cout中使用了ansi 颜色代码,但我相信自从 win 10 周年更新以来这些代码可以在 Windows 中工作。

std::cout << "\033[0;32m" << "[          ] " << "\033[0;0m" 
<< "random seed = " << random_seed << std::endl;
Run Code Online (Sandbox Code Playgroud)

或者只是创建一个头文件和一些#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
Run Code Online (Sandbox Code Playgroud)

所以我的代码是:

std::cout << COUT_GTEST_MGT << "random seed = " << random_seed << ANSI_TXT_DFT << std::endl;
Run Code Online (Sandbox Code Playgroud)