步骤:
1.创建一个类,继承testing::TestWithParam,T是你需要参数化的参数类型,比如参数类型为int
2. 使用新宏TEST_P替代TEST。在TEST_P宏里,可以使用GetParam()获取当前的参数的具体值。
3. 使用INSTANTIATE_TEST_CASE_P宏来输入测试参数。
gtest中提供的参数生成函数
Range(begin, end[, step]) | 范围在begin~end之间,步长为step,不包括end |
---|---|
Values(v1, v2, …, vN) | v1,v2到vN的值 |
ValuesIn(container) and ValuesIn(begin, end) | 从一个C类型的数组或是STL容器,或是迭代器中取值 |
Bool() | 取false 和 true 两个值 |
Combine(g1, g2, …, gN) | 这个比较强悍,它将g1,g2,…gN进行排列组合,g1,g2,…gN本身是一个参数生成器,每次分别从g1,g2,…gN中各取出一个值,组合成一个元组(Tuple)作为一个参数。说明:这个功能只在提供了<tr1/tuple>头的系统中有效。gtest会自动去判断是否支持tr/tuple,如果你的系统确实支持,而gtest判断错误的话,你可以重新定义宏GTEST_HAS_TR1_TUPLE=1。 |
示例:
1.Values()使用
class TestSqare:public testing::TestWithParam<int>{
protected:
int Sqare(int a) {
return a*a;
}
int a;
};
TEST_P(TestSqare,case1){
a = GetParam();
EXPECT_EQ(a*a,Sqare(a));
}
INSTANTIATE_TEST_CASE_P(Sare,TestSqare,testing::Values(1,2,3,4));
int main(int argc,char* argv[])
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
测试结果:
2.Range(begin,end[,step])
class TestSqare:public testing::TestWithParam<int>{
protected:
int Sqare(int a) {
return a*a;
}
int a;
};
TEST_P(TestSqare,case1){
a = GetParam();
EXPECT_EQ(a*a,Sqare(a));
}
INSTANTIATE_TEST_CASE_P(Sare,TestSqare,testing::Range(1,4));
int main(int argc,char* argv[])
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
测试结果:
3.Combine(g1, g2, …, gN)
class FuncTest:public testing::TestWithParam<tuple<int,int>>{
protected:
void SetUp() override
{
a = get<0>(GetParam());
b = get<1>(GetParam());
}
int a;
int b;
};
int func(int a,int b)
{
return a+b;
}
TEST_P(FuncTest, case1)
{
cout<<a<<"+"<<b<<"="<<func(a,b)<<endl;
}
INSTANTIATE_TEST_CASE_P(
CombineTest,
FuncTest,
testing::Combine(testing::Values(1,3,4),testing::Values(2,3,4)));
int main(int argc, char *argv[])
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
测试结果:
4.传入Struct结构体
struct Tuples
{
int a;
int b;
int c;
};
class TestAdd:public testing::TestWithParam<struct Tuples>
{
protected:
void SetUp() override {
t1.a = GetParam().a;
t1.b = GetParam().b;
t1.c = GetParam().c;
}
int add(int x,int y,int z){
return x+y+z;
}
Tuples t1;
};
TEST_P(TestAdd,case1)
{
EXPECT_EQ(t1.a+t1.b+t1.c,add(t1.a,t1.b,t1.c));
}
INSTANTIATE_TEST_CASE_P(StructTest,TestAdd,testing::Values(Tuples{1,2,3},Tuples{4,5,6}));
int main(int argc, char *argv[])
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
测试结果:
使用代码链接