2016-06-23 7 views
1
template <typename T> class ClassA : public ::testing::Test { 
public: 
    ClassA() {} 

    constexpr static uint ZERO = 0; 
}; 

typedef ::testing::Types<ClassB, ClassC, ClassD> ParamTypes; 
TYPED_TEST_CASE(ClassA, ParamTypes); 

template <> constexpr uint ClassA<test::ClassB>::ZERO; 
template <> constexpr uint ClassA<test::ClassC>::ZERO; 
template <> constexpr uint ClassA<test::ClassD>::ZERO; 

TYPED_TEST(ClassA, testSomething) { ASSERT_EQ(ClassA::ZERO, 0); } ?? 
TYPED_TEST(ClassA, testSomething) { ASSERT_EQ(this->ZERO, 0); } ?? 

Was ist der richtige Weg, um statische constexpr typisierte Test mit Google-Test zu verwenden?Verwenden eines statischen consExpr in gtest typisierten Tests

+0

denke ich beide Formen Sie legitim ... –

+0

@ W.F präsentiert sind. sie arbeiten nicht – Lorac

+0

Ich dachte, dass Sie fragen, ob man auf statischen consExpr durch 'this->' zugreifen kann. Meine Vermutung ist, dass es nicht funktioniert, wenn Sie an die unvollständige Testvorlage übergeben ... "ClassA" ist als Vorlage gedacht und sollte daher darauf spezialisiert sein, als vollständiger Typ interpretiert zu werden ... –

Antwort

2

Ich habe immer mehr Erfolg mit den constexpr-Funktionen in diesen Szenarien - keine separate Definition erforderlich.

Fest Auch ein paar Tippfehler:

template <typename T> class ClassA : public ::testing::Test { 
public: 
    ClassA() {} 

    constexpr static uint ZERO() { return 0; } 
}; 

struct ClassB {}; 
struct ClassC {}; 
struct ClassD {}; 


typedef ::testing::Types<ClassB, ClassC, ClassD> ParamTypes; 
TYPED_TEST_CASE(ClassA, ParamTypes); 


TYPED_TEST(ClassA, testSomething) { ASSERT_EQ(ClassA<TypeParam>::ZERO(), 0); } 
TYPED_TEST(ClassA, testSomethingElse) { ASSERT_EQ(this->ZERO(), 0); }