【发布时间】:2014-09-01 10:13:47
【问题描述】:
我们在 2 种不同的配置下构建了一个 MSVC++ 单元测试项目,以针对不同的实现运行相同的测试。由于每个测试运行两次,我们使用预处理器 ugliness 破解测试名称:
#if defined(XXX)
#define _VER BUILDX
#elif defined(YYY)
#define _VER BUILDY
#endif
#define _TEST_SUITE_NAME_PACKAGE(Suite,Package) Suite##_##Package
#define TEST_SUITE_NAME_PACKAGE(Suite,Package) _TEST_SUITE_NAME_PACKAGE(Suite,Package)
#define TEST_SUITE_NAME(Suite) TEST_SUITE_NAME_PACKAGE(Suite,_VER)
#define TEST(test_case_name, test_name) GTEST_TEST(TEST_SUITE_NAME(test_case_name), test_name)
这一切都完美无缺,重新定义了 google-test TEST 宏以使用字符串化技巧修改测试套件名称。
但以下操作不起作用:
#define TEST_F(test_fixture, test_name)\
GTEST_TEST_(TEST_SUITE_NAME(test_fixture), test_name, test_fixture, \
::testing::internal::GetTypeId<test_fixture>())
使用TEST(StringTestSuite,EqualityTest) 代替像StringTestSuite_XXX.EqualityTest 这样的输出,使用TEST_F 会给出如下输出:
TEST_SUITE_NAME(StringTestSuite).EqualityTest
我可以通过一些简单的调整来实现它吗?
作为参考,这里是GTEST_TEST_ 的 gtest 代码。而在gtest.h中,GTEST_TEST定义为:
#define GTEST_TEST(test_case_name, test_name)\
GTEST_TEST_(test_case_name, test_name, \
::testing::Test, ::testing::internal::GetTestTypeId())
【问题讨论】:
标签: c++ visual-c++ googletest c-preprocessor