我想用gtest测试一个模板类,我在Google测试手册中读到了TYPED_TEST
,并查看了他们引用的official example,但仍然无法在测试中示例化模板类的对象。
假设下面的简单模板类:
template <typename T>
class Foo
{
public:
T data ;
};
在测试类中我们声明
typedef ::testing::Types<int, float> MyTypes ;
现在,我如何在测试中为MyTypes
中列出的T
示例化Foo<T>
类的对象?
例如:
TYPED_TEST(TestFoo, test1)
{
Foo<T> object ;
object.data = 1.0 ;
ASSERT_FLOAT_EQ(object.data, 1.0) ;
}
2条答案
按热度按时间vawmfj5a1#
在测试中,引用特殊名称
TypeParam
来获取类型参数。ar5n3qh52#
由于我自己无法弄清楚如何将TemplateRex的答案与Puchatek的原始代码片段结合起来,所以这里有一个完整的可编译示例,我是通过阅读GTest自己的注解得到的,这些注解非常有帮助。
将以下内容放入
test.cpp
:使用适当的
-I
和-l
选项进行编译。如下所示:或者(如果使用
pkg-config
):运行可执行文件,您应该看到类似以下的内容:
(我加入这个失败的测试纯粹是为了演示当类型化测试失败时会发生什么。实际上
sizeof(std::vector<std::regex>)
确实小于sizeof(std::regex)
。)请注意,
TYPED_TEST
产生了一系列名称相关但不相同的测试套件,不再有单一的vector_suite
:而是
vector_suite/0
、vector_suite/1
和vector_suite/2
: