2013-06-13 6 views
6

Я хочу протестировать класс шаблона с помощью gtest. Я прочитал о TYPED_TESTs в gtest manual и посмотрел на official example, они ссылаются, но все равно не могут обернуть мою голову вокруг получения объекта класса шаблона, созданного в моем тесте.gtest - test template class

Пусть следующий простой шаблонный класс:

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

В классе тестирования мы объявляем

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

Теперь, как я могу создать объект класса Foo для Ts, перечисленных в MyTypes в тесте? .

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

    ASSERT_FLOAT_EQ(object.data, 1.0) ; 
} 

ответ

6

Внутри тест, обратитесь к специальному имени TypeParam, чтобы получить параметр типа. Итак, вы можете сделать

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

    ASSERT_FLOAT_EQ(object.data, 1.0) ; 
} 
+0

Замечательно, спасибо большое TemplateRex! Я пробовал использовать TypeParam раньше, но моя ошибка состояла в том, что я думал, что это класс и сделал 'TypeParam n; Foo объект; ' вид вещь, который, конечно, не скомпилирован. Ура! – Puchatek

+0

@Puchatek Рад помочь! – TemplateRex