2016-06-23 3 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); } ?? 

Каков правильный способ использования статического constexpr внутри типизированного теста с тестом google?Использование статического constexpr в gtest typed test

+0

Я думаю, что обе формы вы представлены законны ... –

+0

@ W.F. они не работают – Lorac

+0

Я думал, что вы спрашиваете, можно ли получить доступ к static constexpr с помощью 'this->'. Я предполагаю, что он не работает, когда вы переходите к тестовому неполному шаблону ... «ClassA» является шаблоном, и поэтому он должен быть специализированным, чтобы интерпретироваться как полный тип ... –

ответ

2

У меня всегда есть больше успеха с функциями constexpr в этих сценариях - нет необходимости предоставлять отдельное определение.

Кроме того, исправлена ​​пара опечаток:

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); } 
Смежные вопросы