Google Test中如何分组模板测试夹具并按指定类型运行?
模板测试夹具分组解决方案(Google Test)
在Google Test中,可以通过**TYPED_TEST_SUITE和TYPED_TEST**机制实现模板测试夹具的分组,既能保留访问成员变量的特性,又能将不同类型的测试归到统一套件下管理,解决单独运行模板类提示无测试的问题。
实现步骤
- 保留原有模板夹具类的定义,继承
testing::Test并维护成员变量_value。 - 使用
TYPED_TEST_SUITE绑定模板夹具类与要测试的类型列表,形成统一测试套件。 - 使用
TYPED_TEST编写测试用例,通过TypeParam引用当前测试类型,通过this->_value访问成员变量。
完整代码示例
#include <gtest/gtest.h> #include <type_traits> template<typename T> struct UTestClass : public testing::Test { T _value; }; // 定义测试套件,指定需要测试的类型集合 using NumericTestTypes = testing::Types<float, double>; TYPED_TEST_SUITE(UTestClass, NumericTestTypes); // 所有类型通用的测试用例 TYPED_TEST(UTestClass, TestValueAssignment) { this->_value = static_cast<TypeParam>(2.5); EXPECT_EQ(this->_value, static_cast<TypeParam>(2.5)); } // 仅针对特定类型的测试用例(通过类型判断实现) TYPED_TEST(UTestClass, TestDoublePrecision) { if constexpr (std::is_same_v<TypeParam, double>) { this->_value = 3.1415926535; EXPECT_DOUBLE_EQ(this->_value, 3.1415926535); } else { // 非double类型跳过该测试 GTEST_SKIP() << "此测试仅针对double类型"; } }
效果说明
- 运行测试时,Google Test会自动为每个类型实例化测试套件,测试用例将以
UTestClass/<类型>的形式展示(如UTestClass/float.TestValueAssignment)。 - 可以直接运行整个
UTestClass套件,所有类型的测试会批量执行;也可以单独指定某一类型的测试(如UTestClass/double)。 - 完全保留了访问成员变量
_value的特性,同时实现了测试的分组管理。
内容的提问来源于stack exchange,提问作者xyf
相关产品推荐
相关产品推荐

