枚举成员每次迭代的新测试夹具

时间:2012-10-31 11:07:06

标签: googletest

我的测试包含在用TEST_F声明的函数中,因此我可以在测试之间使用新的测试夹具对象。对于每个TEST_F,创建一个新的测试夹具实例。但是,如果我希望在测试中循环枚举并为每次迭代设置一个新的测试夹具实例,该怎么办?在这种情况下我该怎么做?

1 个答案:

答案 0 :(得分:1)

听起来你想使用value-parameterized tests

你可以像这样迭代枚举的值:

#include <iostream>
#include "gtest/gtest.h"

enum Malt { bowmore = 10, talisker, scapa };

class Whisky {
 public:
  explicit Whisky(const Malt& malt) : malt_(malt) {}
  bool IsIslay() const { return malt_ == bowmore; }
 private:
  Malt malt_;
};

class DramTest : public testing::TestWithParam<Malt> {
 protected:
  DramTest() : whisky_(GetParam()) {}
  Whisky whisky_;
};

TEST_P(DramTest, IsIslay) {
  if (GetParam() == bowmore)
    EXPECT_TRUE(whisky_.IsIslay());
  else
    EXPECT_FALSE(whisky_.IsIslay());
}

INSTANTIATE_TEST_CASE_P(AllMalts, DramTest,
                        testing::Values(bowmore, talisker, scapa));

int main(int argc, char **argv) {
  testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}


如果您有大量的枚举值,则可以使用Range生成器而不是Value生成器:

testing::Range<int>(bowmore, scapa + 1)

但这需要在int和enum类型之间的夹具中进行一些铸造。


两种选择都存在维护问题;如果添加新的枚举值,则需要记住更改测试。