2013-06-13 13 views
6

gtestを使ってテンプレートクラスをテストしたいと思います。私はgtest manualのTYPED_TESTについて読んで、official exampleを参照しましたが、私のテストでインスタンス化されたテンプレートクラスのオブジェクトを取得することについては頭を抱えていません。gtest - テストテンプレートクラス

次のような単純なテンプレートクラスを仮定します

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) ; 
} 

答えて

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