2017-07-21 2 views
0

Ich habe einige Komponententests auf Windows (Visual Studio 2017) geschrieben und ich muss sie auf Linux portieren (GCC 4.9.2 - Ich bin mit dieser Version fest ...). Ich bin mit einem einfachen Beispiel für mein Problem gekommen, das sich unter Windows gut kompiliert (ich glaube nicht, dass es kompiliert werden sollte, da MyParamType ein abhängiger Typ von der Basisklasse der Vorlage ist) und kompiliert nicht unter Linux.Wie bekomme ich gtest TYPED_TEST Parameter Typ

Beispiel:

#include <gtest/gtest.h> 

template<typename T> 
struct MyTest : public testing::Test 
{ 
    using MyParamType = T; 
}; 

using MyTypes = testing::Types<int, float>; 
TYPED_TEST_CASE(MyTest, MyTypes); 

TYPED_TEST(MyTest, MyTestName) 
{ 
    MyParamType param; 
} 

In member function ‘virtual void MyTest_MyTestName_Test::TestBody()’:error: ‘MyParamType’ was not declared in this scope MyParamType param;

Mit dem Wechsel zu:

TYPED_TEST(MyTest, MyTestName) 
{ 
    typename MyTest<gtest_TypeParam_>::MyParamType param; 
} 

Der Code kompiliert, aber es sieht sehr hässlich.

Gibt es eine einfache/nette Möglichkeit, den Template-Parametertyp von einer TYPED_TEST zu erhalten?

+0

ich für diese – Felics

Antwort

2

ist die Antwort in der Dokumentation versteckt:

#include <gtest/gtest.h> 

template<typename T> 
struct MyTest : public testing::Test 
{ 
    using MyParamType = T; 
}; 

using MyTypes = testing::Types<int, float>; 
TYPED_TEST_CASE(MyTest, MyTypes); 

TYPED_TEST(MyTest, MyTestName) 
{ 
    // To refer to typedefs in the fixture, add the 'typename TestFixture::' 
    // prefix. The 'typename' is required to satisfy the compiler. 

    using MyParamType = typename TestFixture::MyParamType; 
} 

https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md

+0

'dass Gtest definiert TypeParam' genau realisiert habe die gleiche Sache' TypeParam'? Es scheint so zu sein, dass es "T" ist – Felics

Verwandte Themen