gtest - 测试模板类

Puc*_*tek 9 c++ templates unit-testing googletest

我想用gtest测试模板类.我在Google测试手册中阅读了有关TYPED_TESTs的内容,并查看了他们引用的官方示例,但仍无法解决在我的测试中实例化模板类的对象.

假设以下简单模板类:

template <typename T>
class Foo
{
public:
    T data ;
};
Run Code Online (Sandbox Code Playgroud)

在测试类我们声明

typedef ::testing::Types<int, float> MyTypes ;
Run Code Online (Sandbox Code Playgroud)

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

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

    ASSERT_FLOAT_EQ(object.data, 1.0) ;
}
Run Code Online (Sandbox Code Playgroud)

Tem*_*Rex 8

在测试中,请参阅特殊名称TypeParam以获取type参数.所以你可以做到

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

    ASSERT_FLOAT_EQ(object.data, 1.0) ;
}
Run Code Online (Sandbox Code Playgroud)