2013-06-13 13 views
6

Ich möchte eine Template-Klasse mit gtest testen. Ich lese über TYPED_TESTs in und sah auf official example sie verweisen, aber immer noch nicht meinen Kopf um ein Objekt der Template-Klasse in meinem Test instanziiert bekommen.gtest - test template class

die folgende einfache Template-Klasse Angenommen:

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

In Testklasse wir

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

nun erklären, wie kann ich ein Objekt der Klasse Foo für Ts in MyTypes in einem Test aufgeführt instanziiert? Zum Beispiel

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

    ASSERT_FLOAT_EQ(object.data, 1.0) ; 
} 

Antwort

6

Innerhalb eines Tests beziehen sich auf die speziellen Namen TypeParam den Typ-Parameter zu erhalten. So könnten Sie tun

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

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

Wunderbar, vielen Dank TemplateRex! Ich habe versucht mit TypeParam vorher, aber mein Fehler war, dass ich dachte, es ist eine Klasse und tat 'TypeParam n; Foo Objekt; ' Art von Sache, die natürlich nicht kompilieren. Prost! – Puchatek

+0

@Puchatek Froh, dass ich geholfen habe! – TemplateRex

Verwandte Themen