我可以在gtest中为值参数化测试提供更好的名称吗?

Lev*_*Lev 13 googletest

我在gtest中使用值参数化测试.例如,如果我写

INSTANTIATE_TEST_CASE_P(InstantiationName,
                    FooTest,
                    ::testing::Values("meeny", "miny", "moe"));
Run Code Online (Sandbox Code Playgroud)

然后在输出中我看到测试名称,如

InstantiationName/FooTest.DoesBlah/0 for "meeny"
InstantiationName/FooTest.DoesBlah/1 for "miny"
InstantiationName/FooTest.DoesBlah/2 for "moe" 
Run Code Online (Sandbox Code Playgroud)

有没有办法让这些名字更有意义?我想看

InstantiationName/FooTest.DoesBlah/meeny
InstantiationName/FooTest.DoesBlah/miny
InstantiationName/FooTest.DoesBlah/moe
Run Code Online (Sandbox Code Playgroud)

ksb*_*ksb 9

INSTANTIATE_TEST_CASE_P接受可选的第4个参数,可用于此目的.请参阅https://github.com/google/googletest/blob/master/googletest/include/gtest/gtest-param-test.h#L1409.


The*_*ema 2

两种方式:(http://osdir.com/ml/googletestframework/2011-09/msg00005.html

1)修补现有的 PrettyUnitTestPrinter 以打印测试名称;就像是:

--- a/gtest-1.7.0/src/gtest.cc
+++ b/gtest-1.7.0/src/gtest.cc
@@ -2774,6 +2774,7 @@ void PrettyUnitTestResultPrinter::OnTestCaseStart(const TestCase& test_case) {
 void PrettyUnitTestResultPrinter::OnTestStart(const TestInfo& test_info) {
   ColoredPrintf(COLOR_GREEN,  "[ RUN      ] ");
   PrintTestName(test_info.test_case_name(), test_info.name());
+  PrintFullTestCommentIfPresent(test_info);
   printf("\n");
   fflush(stdout);
 }
Run Code Online (Sandbox Code Playgroud)

2) 编写一个新的 TestListener 来打印您喜欢的测试结果。( https://code.google.com/p/googletest/source/browse/trunk/samples/sample9_unittest.cc ) GTest 允许注册新的测试侦听器(并取消注册内置默认侦听器),从而允许非常灵活地自定义测试输出。请参阅链接以获取示例代码。