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

Google 테스트에서 typed 테스트에 정적 constexpr을 사용하는 올바른 방법은 무엇입니까?gtest 유형 테스트의 정적 constexpr 사용

+0

난 당신이되게 두 형태가 합법적 인 생각 ... –

+0

:

또한, 오타의 몇 가지를 해결했습니다. 그들은 작동하지 않습니다 – Lorac

+0

나는 당신이'this->'에 의해 정적 constexpr에 접근 할 수 있는지 묻는다고 생각했습니다. 내 생각 엔 당신이 테스트 불완전한 템플릿에 합격하면 작동하지 않는다는 것입니다.'ClassA'는 템플리트 화되어 있으며 완전한 유형으로 해석 될 수 있도록 특수화되어 있어야합니다 ... –

답변

2

이 시나리오에서는 항상 constexpr 함수를 사용하여 더 많은 성공을 거두었습니다. 별도의 정의를 제공 할 필요가 없습니다. W.F @

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); } 
관련 문제