26

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

INSTANTIATE_TEST_CASE_P(InstantiationName,
                    FooTest,
                    ::testing::Values("meeny", "miny", "moe"));

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

InstantiationName/FooTest.DoesBlah/0 for "meeny"
InstantiationName/FooTest.DoesBlah/1 for "miny"
InstantiationName/FooTest.DoesBlah/2 for "moe" 

有什么办法让这些名字更有意义?我倒要看看

InstantiationName/FooTest.DoesBlah/meeny
InstantiationName/FooTest.DoesBlah/miny
InstantiationName/FooTest.DoesBlah/moe
4

3 回答 3

15

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

于 2016-08-23T05:08:54.363 回答
3

这现在在INSTANTIATE_TEST_SUITE_P中可用。

INSTANTIATE_TEST_SUITE_P() 的可选最后一个参数允许用户指定根据测试参数生成自定义测试名称后缀的函数或函子。

有趣的是源中的这一部分

// A user can teach this function how to print a class type T by
// defining either operator<<() or PrintTo() in the namespace that
// defines T.  More specifically, the FIRST defined function in the
// following list will be used (assuming T is defined in namespace
// foo):
//
//   1. foo::PrintTo(const T&, ostream*)
//   2. operator<<(ostream&, const T&) defined in either foo or the
//      global namespace.
于 2020-01-22T10:20:57.857 回答
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);
 }

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

于 2015-02-24T07:21:14.600 回答