如何在 Google 测试的案例方法中提取测试名称?

How to extract test name in Google Test's case method?

我有一堆测试用例,每个用例都会输出一个文件。我希望每个文件都以相应的案例名称命名,这样结果文件就不会互相干扰。有没有办法通过编程来做到这一点?

我现在有什么(不想重复案例名称,因为它可以更改:

TEST_F(Foo, Bar)
{
  ...
  std::ofstream("Bar.bat");
  ...
}

我想要的:

TEST_F(Foo, Bar)
{
  ...
  std::ofstream(magic_method_to_get_case_name() + ".dat");
  ...
}

只是找出如何做到这一点。我会在这里分享,以防有人想知道。

看起来 GTEST_TEST_ 宏会将名称信息保存在私有静态变量中:

#define GTEST_TEST_(test_case_name, test_name, parent_class, parent_id)\
class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\
 public:\
  GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\
 private:\
  virtual void TestBody();\
  static ::testing::TestInfo* const test_info_;\
  GTEST_DISALLOW_COPY_AND_ASSIGN_(\
      GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\
};\

所以,无论如何,代码都可以通过它获取案例名称:

test_info_->name()

案例名称不是唯一可以获取的信息 -- 请检查 gtest.h 中的 TestInfo class。

可以通过 UnitTest 单例 class.

访问当前测试的名称
::testing::UnitTest::GetInstance()->current_test_info()->name();

因为 UnitTest 是单例,这也可以从 static/global 测试实用程序方法中调用。