11

我想用 gtest 测试一个模板类。我在Google 测试手册中阅读了 TYPED_TESTs并查看了他们引用的官方示例,但仍然无法在我的测试中实例化模板类的对象。

假设以下简单的模板类:

template <typename T>
class Foo
{
public:
    T data ;
};

在测试类中,我们声明

typedef ::testing::Types<int, float> MyTypes ;

现在如何在测试中为 MyTypes 中列出的 Ts 实例化类 Foo 的对象?例如

TYPED_TEST(TestFoo, test1)
{
    Foo<T> object ;
    object.data = 1.0 ;

    ASSERT_FLOAT_EQ(object.data, 1.0) ;
}
4

1 回答 1

12

在测试中,引用特殊名称TypeParam来获取类型参数。所以你可以做

TYPED_TEST(TestFoo, test1)
{
    Foo<TypeParam> object ; // not Foo<T>
    object.data = 1.0 ;

    ASSERT_FLOAT_EQ(object.data, 1.0) ;
}
于 2013-06-13T08:52:10.347 回答