在gtest类型测试中使用静态constexpr

时间:2016-06-23 19:35:17

标签: c++ c++11 googletest

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的正确方法是什么?

1 个答案:

答案 0 :(得分: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); }