我的测试包含在用TEST_F
声明的函数中,因此我可以在测试之间使用新的测试夹具对象。对于每个TEST_F
,创建一个新的测试夹具实例。但是,如果我希望在测试中循环枚举并为每次迭代设置一个新的测试夹具实例,该怎么办?在这种情况下我该怎么做?
答案 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类型之间的夹具中进行一些铸造。
两种选择都存在维护问题;如果添加新的枚举值,则需要记住更改测试。