gtest参数化

步骤:
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();
}

测试结果:
在这里插入图片描述
使用代码链接

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值