我正在使用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个空格或其他来明确缩进输出。
答案 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 文件中然后运行它
代码示例:
@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.
答案 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;