我正在使用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)
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::cout、std::cerr在 gTest 中不起作用。
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)
我刚刚在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)
归档时间: |
|
查看次数: |
52347 次 |
最近记录: |