首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

单元测试之参数化测试

问题引入

Web服务提供restful API供前端调用,restful API支持http/https协议,现构造http/https请求对restful API进行单元测试,单元测试代码除了请求使用的协议不同,请求url、请求参数都一样,如何用一套单元测试代码测试http/https restfulAPI呢?

目标

掌握使用参数化测试夹具对单元测试用例进行参数化配置

参数化测试夹具类图结构

TestWithParam是一个模板类测试夹具,与其它测试夹具一样继承于Test类,为了支持参数化继承于WithParamInterface模板类,WithParamInterface模板类定义一个成员变量parameter_,类型为模板参数指定的类型,同时定义设置/获取参数的接口。子类继承获取参数接口GetParam。设置参数接口SetParam是私有接口,供gtest内部在运行每个单元测试前进行参数化配置时使用。MyTestFixture是单元测试代码要写的测试夹具,它不是模板类,继承TestWithParam时需指定模板参数T。

参数化测试夹具使用示例

现使用参数化测试夹具实现文章一开始提出的问题,示例代码只是为了演示。

类RemoteResource实现Request接口用于测试Web服务的Restful API,内部实现依协议是http或https有所不同,协议参数值设置通过构造函数传入。

RemoteResourceTest是一个参数化测试夹具,继承于TestWithParam模板类,模板参数指定string类型,用于存储协议值。测试夹具定义一个成员变量remote_resource_用于测试,构造函数调用继承下来的GetParam接口获取参数值去实例化remote_resource_对象。

使用宏TEST_P定义测试用例,尾部字母P为Param的首字母,宏TEST_P与其它定义测试用例宏一样有两个参数:测试夹具名称、测试用例名称。

使用宏INSTANTIATE_TEST_CASE_P实例化测试用例,尾部字母P为Param首字母,有三个参数:前缀、测试夹具名称、参数值列表。构造用例测试名称时前缀会放在前面,主要用于避免名字冲突类似于C++名字空间。参数值类型必须与参数化测试夹具的参数类型一致,参数值用Values聚合在一起。宏INSTANTIATE_TEST_CASE_P内部使用很多C++宏技巧实现,INSTANTIATE_TEST_CASE_P(RemoteResource, RemoteResourceTest,Values("http", "https")); 这行代码会生成2条的Request测试用例,第一条运行前会设置测试参数为http,第二条运行前会设置参数为https。

总结

参数化测试三步骤:

定义参数化测试夹具,继承TestWithParam,指定模板参数T,测试夹具内部调用GetParam接口获取参数,根据参数进行实现

使用宏TEST_P定义测试用例

使用宏INSTANTIATE_TEST_CASE_P实例化测试用例,将参数值列表用Values聚合在一起

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180418G0D58N00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券