如何在 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 测试实用程序方法中调用。
我有一堆测试用例,每个用例都会输出一个文件。我希望每个文件都以相应的案例名称命名,这样结果文件就不会互相干扰。有没有办法通过编程来做到这一点?
我现在有什么(不想重复案例名称,因为它可以更改:
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 测试实用程序方法中调用。