QTest单元测试框架,简单,好用,高效

简介: QTest单元测试框架,简单,好用,高效

在上一篇文章,小豆君向大家介绍了一个简单的测试程序,使大家了解了测试程序的基本样子,有了初步的印象。我们的主题是Qt,所以今天来介绍下Qt的测试框架,小豆君打算分三篇文章来详细介绍Qt测试框架。


在进入主题之前,我想说的是,之所以会分享一系列的测试方法,其实是想向大家推出一种编程方法,即:先编写测试用例,再编写类实现。这有别于我们通常先编写实现,再进行测试的方式。


先编写测试用例会帮助你更加了解架构和设计意图,迫使类开发者以类使用者的角度看待和使用接口,降低代码的耦合关系,在实现被改变的时候,能够快速响应改变后的正确性。如果你向使用者提供接口,这些测试用例就是最好的文档,且永不过时(如果是word文档,那很可能版本不一)。同时,它还可以帮助你在需求或逻辑不是很明朗的时候,理清需求,整理思路,避免不必要的开发。


就从我个人体验而言,在我初出茅庐时就有前辈跟我讲先测试后编程,而那时我却固执的认为这会降低我的编程效率,浪费时间,完全没有直接实现类来的更快,更爽。直到有一天我被不断变化的需求折磨的要死,尝试着采用先测试的开发方式,从此便体会到了它的好处。人真是必须先吃点苦头,才懂得前人总结的重要性啊。


如果你掌握并熟练的运用这一套开发方式,我想这绝对会是你优于他人的一项重要技能。


关于具体的编程步骤,小豆君会在介绍完Qt的测试框架后,再给大家作详细介绍,话不多说,我们进入今天的主题,QTest。


我们计划编写一个测试用例,用来测试上一篇文章中的Commodity类(程序员晋升必备技能——单元测试框架


1 添加testlib模块

直接打开SimpleTest工程,在pro文件中添加testlib模块

QT += core testlib


2 添加测试类CommodityTest


该类必须继承自QObject。所有的测试接口都必须声明为private slots,这样测试框架才会找到这些接口,并执行它们。我对于函数的命名为:

casen_函数名

当然,你也可以选用自己喜欢的命名方式。

头文件:

#include <QtTest/QtTest>
class CommodityTest : public QObject
{
    Q_OBJECT
private slots:
    void case1_serialNum();
    void case2_name();
    void case3_consting();
    void case4_price();
    void case5_profit();
};


源文件:

#include "commoditytest.h"
#include "commodity.h"
void CommodityTest::case1_serialNum()
{
    //测试编号
    Commodity c("beer_1", "啤酒", 4, 5);
    QVERIFY(c.serialNum() == "beer_1");
}
void CommodityTest::case2_name()
{
    //测试商品名称
    Commodity c("beer_1", "啤酒", 4, 5);
    QVERIFY(c.name() == "啤酒");
}
void CommodityTest::case3_consting()
{
    //测试商品成本
    Commodity c("beer_1", "啤酒", 4, 5);
    QVERIFY(c.consting() == 4);
}
void CommodityTest::case4_price()
{
    //测试商品价格
    Commodity c("beer_1", "啤酒", 4, 5);
    QVERIFY(c.price() == 5);
}
void CommodityTest::case5_profit()
{
    //测试利润 价格减去成本
    Commodity c("beer_1", "啤酒", 4, 5);
    QVERIFY(c.profit() == 1);
}


QVERIFY()宏将计算表达式的值,如果为true,则继续执行测试函数。否则,失败的消息会附加到测试日志或输出窗口中,测试函数将停止执行。


如果你想要对测试日志有更详细的输出,可使用QCOMPARE()宏来代替,用法与QVERIFY()一样。


3 修改main函数

将main函数修改为:

#include "commoditytest.h"
QTEST_MAIN(CommodityTest)

其中,QTEST_MAIN是一个main函数宏。


4 运行程序

程序输出如下内容:

哈哈,全部通过。

细心的同学可能发现,最终的测试函数中多了两个函数

/*在执行所有测试用例前,系统会先执行此函数,用来做一些初始化操作,
如果你有需要初始化的东西,例如数据库连接,环境变量的配置等都可以放到这个函数中*/
initTestCase()      
/*在最后一个测试用例执行结束,会调用这个函数,进行扫尾工作*/
cleanupTestCase()

5 使用命令行参数运行测试程序


可直接在Creator的“项目=》run=》运行设置=》命令行参数“中添加参数。


5.1 执行指定的测试函数

直接添加函数名即可:

运行:


5.2 将测试结果输出到文件

格式:-o 文件名称 文件格式(可以 是xml,txt等格式)

例如:

好的,关于Qt测试框架第一节的内容就分享到这里,希望你能有所收获,我们下期再见,最后不要忘了点赞分享哦。


更多分享请关注微信公众号:小豆君Qt分享,只要关注,便可加入C++\Qt交流群,一起学习,更可获得所有文章源码。

相关文章
|
4天前
|
人工智能 自然语言处理 测试技术
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
AxBench 是由斯坦福大学推出,用于评估语言模型可解释性方法的基准测试框架,支持概念检测和模型转向任务,帮助研究者系统地比较不同控制技术的有效性。
31 5
AxBench:斯坦福大学推出评估语言模型控制方法的基准测试框架
|
26天前
|
小程序 前端开发 关系型数据库
uniapp跨平台框架,陪玩系统并发性能测试,小程序源码搭建开发解析
多功能一体游戏陪练、语音陪玩系统的开发涉及前期准备、技术选型、系统设计与开发及测试优化。首先,通过目标用户分析和竞品分析明确功能需求,如注册登录、预约匹配、实时语音等。技术选型上,前端采用Uni-app支持多端开发,后端选用PHP框架确保稳定性能,数据库使用MySQL保证数据一致性。系统设计阶段注重UI/UX设计和前后端开发,集成WebSocket实现语音聊天。最后,通过功能、性能和用户体验测试,确保系统的稳定性和用户满意度。
|
1月前
|
存储 测试技术 API
pytest接口自动化测试框架搭建
通过上述步骤,我们成功搭建了一个基于 `pytest`的接口自动化测试框架。这个框架具备良好的扩展性和可维护性,能够高效地管理和执行API测试。通过封装HTTP请求逻辑、使用 `conftest.py`定义共享资源和前置条件,并利用 `pytest.ini`进行配置管理,可以大幅提高测试的自动化程度和执行效率。希望本文能为您的测试工作提供实用的指导和帮助。
114 15
|
2月前
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
546 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
2月前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
91 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
2月前
|
人工智能 搜索推荐 数据管理
探索软件测试中的自动化测试框架选择与优化策略
本文深入探讨了在现代软件开发流程中,如何根据项目特性、团队技能和长期维护需求,精准选择合适的自动化测试框架。
155 11
|
2月前
|
安全 Ubuntu Linux
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
62 9
Metasploit Pro 4.22.6-2024111901 (Linux, Windows) - 专业渗透测试框架
|
2月前
|
Java 测试技术 API
探索软件测试中的自动化测试框架
本文深入探讨了自动化测试在软件开发中的重要性,并详细介绍了几种流行的自动化测试框架。通过比较它们的优缺点和适用场景,旨在为读者提供选择合适自动化测试工具的参考依据。
|
2月前
|
数据管理 jenkins 测试技术
自动化测试框架的设计与实现
在软件开发周期中,测试是确保产品质量的关键步骤。本文通过介绍自动化测试框架的设计原则、组件构成以及实现方法,旨在指导读者构建高效、可靠的自动化测试系统。文章不仅探讨了自动化测试的必要性和优势,还详细描述了框架搭建的具体步骤,包括工具选择、脚本开发、执行策略及结果分析等。此外,文章还强调了持续集成环境下自动化测试的重要性,并提供了实际案例分析,以帮助读者更好地理解和应用自动化测试框架。
|
2月前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!

热门文章

最新文章