小试Googletest记二

        学习了gtest的一些基础知识后进入了玩转Google开源C++单元测试框架Google Test系列(gtest)之四 - 参数化,参数化的测试在平时的应用中应该也比较常见,原博主介绍的例子非常简洁,琢磨着怎样根据自己的需要定制参数,而不是简单的使用基本变量(int之类的),就拿原博主之前用的Foo函数(计算最大公约数的例子)测试举例,如果要参数化测试一组数据该怎么做,学习了一些资料找到的方案:

 1. 声明我们定制的参数结构,并定义我们要的测试案例数组;

struct Test_Case
{
	int exp; //预测值
	int a;   //传入参数a
	int b;   //传入参数b
};
Test_Case inputs[5];


2.此时的inputs[5]是全局变量,可以在定义时便将其初始化,但很多情况要使用循环初始化,因此这里我们采用循环初始化,增加我们自己写的函数 CaseInit()

void CaseInit()
{
	//测试(1,4)、(3,6)、(5,8)、(7,10)、(9,12)的最大公约数是否都为1;
	for (int i = 0 ; i < 5 ; i++)
	{
		inputs[i].exp = 1;
		inputs[i].a = i * 2 + 1;
		inputs[i].b = (i + 2) * 2;
	}
}

      值得注意的是,此时我们将面临一个问题,就是CaseInit()函数必须在input被使用前被执行以保证input被成功初始化,最简单的方法就是在main函数的第一行便调用CaseInit()。为了一个测试案例修改main函数的写法总是显得有些不妥,不过想想将CaseInit()作为所有测试数据的初始化函数也不错,如果以后发现更好的方法再补充上来吧,继续~

  3.我们的初始化测试数据的任务已经完成了,接下来执行两个重要步骤:

      3.1  添加类

class MultiTest : public::testing::TestWithParam<Test_Case>
{

};

 其中MultiTest是本测试案例的名字,当然可以自己随意取名,但接下来都需要用到这个名字

     3.2 初始化测试函数   

INSTANTIATE_TEST_CASE_P(demo,MultiTest,::testing::ValuesIn(inputs));

第一个参数是测试案例的前缀,可以任意取。 
第二个参数是测试案例的名称,需要和之前定义的参数化的类的名称相同,如此处的MultiTest
第三个参数是可以理解为参数生成器,上面的例子使用test::ValuesIn表示使用inputs数组内的元素。


4.最后一步当然是书写我们的测试case:

TEST_P(MultiTest,test1)
{
	
	const Test_Case& n = GetParam();
	EXPECT_EQ(n.exp, Foo(n.a,n.b));
}

至此就大功告成了,结果长这样:



        到这里,单个参数化的测试案例就算完整了,如果要写多组参数化的测试怎么办?只在上述方法的基础上再添加Test_P宏是不行,因为一个唯一的名字标示了一个测试案例(上例中的MultiTest),而一个测试案例唯一绑定了一个继承类和数据源(见步骤3中的操作)。因此如果要写多组测试案例的话,需要依次执行上述步骤:创建数据数组,绑定继承类,初始化函数(绑定数据源),实现Test_P函数。同时必须保证新的案例有另一个唯一的名字,当然新的数据数组依然可以放在上例中的CaseInit函数中。

      初步理解如此,如有不完善不正确之处还多指教。如果有更好的理解,非常欢迎评论,期待一起共同讨论!


转载需知:本文通过易转载管理转载授权,请在易转载官网(yizhuanzai.com)输入本文授权码:YU6V,查看转载要求并获取转载授权。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值