Search code examples
c++unit-testingtemplatesgoogletest

How can I instantiate an object of class Foo<T> for Ts listed in MyTypes in a test?


I want to test a template class with gtest. I read about TYPED_TESTs in Google Test manual and looked at official example they reference, but still can't wrap my head around getting an object of template class instantiated in my test.

Suppose the following simple template class:

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

In testing class we declare

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

Now how can I instantiate an object of class Foo<T> for Ts listed in MyTypes in a test?

For example:

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

Solution

  • Inside a test, refer to the special name TypeParam to get the type parameter. So you could do

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