在上一节中,小豆君跟大家分享了QTest的基本用法,但是有时候编写测试用例时,需要设定多个用例来测试一个功能点。
例如,测试商品的利润,可能会用到下面的多个测试用例:
Commodity c1("beer_1", "啤酒", 4, 5);QVERIFY(c1.profit() == 1);
Commodity c2("beer_1", "啤酒", 4, 6.5);QVERIFY(c2.profit() == 1.5);
Commodity c3("beer_1", "啤酒", 4, 2);QVERIFY(c3.profit() == -2);
那么,这就需要编写三个测试用例,但是我更希望对于一个功能点只编写一个测试用例,这样就不会被这些重复的代码弄得乱七八糟了。而强大的QTest恰好为我们提供了这样的功能。
1 编写多数据测试集
在上一节的CommodityTest类中新增一个槽函数case5_profit_data():
该函数必须以case5_profit开头,_data结尾。
case5_profit_data()函数实现如下:
addColumn函数指定该数据列名称为"commodity",类型为Commodity。
同理,再指定一个结果列result,类型为double
newRow接口新增一个测试行,该行的两列为刚刚添加的两列,注意列类型要保持一致。
其实,以上的数据流可以用一个数据表结构来表示:
这下就可以弄懂了吧。
接下来,重写case5_profit测试接口
QFETCH查找名称为commodity的列,并将commodity的类型设为Commodity,然后调用它的profit接口,与result列的值进行比较。
接下来,我们运行一下测试程序:
测试结果很顺利,全部通过!
2 使用命令行指定测试数据集
在命令行中输入如下内容:case5_profit:int case5_profit:double
运行结果如下,这个结果表明只执行了case5_profit中的int数据行和double数据行:
其中,case5_profit:int表示调用测试函数中的case5_profit的名称为int的数据行
同理,case5_profit:double表示调用测试函数中的case5_profit的名称为double的数据行。
好的,关于Qt测试框架第二节的内容就分享到这里,希望你能有所收获,下期小豆君将分享QTest测试GUI的方法,敬请期待吧。
更多分享请关注微信公众号:小豆君Qt分享,只要关注,便可加入C++\Qt交流群,一起学习,更可获得所有文章源码。