问题引入
定义接口A,接口A有两种实现B和C,现有一组测试用例对接口A进行测试,这套测试用例对B和C均适用,区别在于实例化时是使用B还是C,gtest把这类测试称为类型测试,gtest只要求一套测试用例可以测试类型B也可以测试类型C,不要求B和C要满足一定关系。gtest类型测试特性一般用于接口测试。
目标
掌握使用gtest模板测试夹具进行类型测试。
模板测试夹具
gtest使用带有模板参数的测试夹具进行类型测试,现以一个实例讲解如何使用模板参数的测试夹具进行类型测试。
定义一个求和接口SumInterface,AccumulationSum和QuickSum是两种不同的实现方式,AccumulationSum从小到大累加,QuickSum使用公式:(首项+末项)*项数/2 来计算。两种实现方式未考虑参数from > to 情况,所以测试将会不通过。现编写测试用例对接口SumInterface进行测试。
首先,定义测试夹具SumTest,带有模板参数T,SumTest内部实现使用模板参数T实例化SumInterface对象sum_util_。
然后,使用宏TYPED_TEST_CASE将测试夹具与要测试的类型进行绑定,宏TYPED_TEST_CASE有两个参数:测试场景名称,类型。测试场景名称必须与测试夹具名称一样。类型使用模板类Types构造,本次测试类型为AccumulationSum和QuickSum。第2个参数直接写Types<AccumulationSum,QuickSum>编译器会报警告,于是用typedef定义一个新的名字。
最后,使用宏TYPED_TEST定义三个测试用例FromGreatTo、FromEqualTo、FromLessTo,宏TYPED_TEST参数和TEST、TEST_F一样。宏TYPED_TEST会生成2个测试场景共6个测试用例,类型AccumulationSum的测试场景和类型QuickSum的测试场景各3个测试用例,gtest内部实现使用宏递归技巧在编译时自动生成代码。
总结
类型测试三步骤:
定义模板测试夹具
使用宏TYPED_TEST_CASE将测试夹具与要测试的类型进行绑定
使用宏TYPED_TEST定义测试用例
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。