Qt单元测试浅析
Qt单元测试框架,使用于基于Qt的应用程序和库,先从一个简单的demo工程说起吧。
我们可以通过QtCreator来创建一个简单的Qt单元测试工程,夏天到了,这个demo工程的名字就叫Summer好了,创建过程中其它选项默认,完成后生成两个文件:Summer.pro和tst_summertest.cpp,先来看一下这两个文件。
Summer.pro——
- QT += testlib
- QT -= gui
- TARGET = tst_summertest
- CONFIG += console
- CONFIG -= app_bundle
- TEMPLATE = app
- SOURCES += tst_summertest.cpp
- DEFINES += SRCDIR=\\\"$$PWD/\\\"
Summer.pro文件中的QT+=testlib是必须的。
tst_summertest.cpp——
- #include <QString>
- #include <QtTest>
- class SummerTest : public QObject
- {
- Q_OBJECT
- public:
- SummerTest();
- private Q_SLOTS:
- void testCase1();
- };
- SummerTest::SummerTest()
- {
- }
- void SummerTest::testCase1()
- {
- QVERIFY2(true, "Failure");
- }
- QTEST_APPLESS_MAIN(SummerTest)
- #include "tst_summertest.moc"
然后来编译运行(使用QtCreator)一下,结果如下:
- ********* Start testing of SummerTest *********
- Config: Using QtTest library 5.3.1, Qt 5.3.1
- PASS : SummerTest::initTestCase()
- PASS : SummerTest::testCase1()
- PASS : SummerTest::cleanupTestCase()
- Totals: 3 passed, 0 failed, 0 skipped
- ********* Finished testing of SummerTest *********
在Summer工程中,C++代码里include了<QtTest>头文件,文件结尾处include了对应的.moc文件,测试类SummerTest要继承自QObject类或QObject的子类,需使用Q_OBJECT宏,测试方法testCase1()应标识为私有槽。
QTEST_APPLESS_MAIN(SummerTest)宏实际上是一个main()函数,其定义如下:
- #define QTEST_APPLESS_MAIN(TestObject) \
- int main(int argc, char *argv[]) \
- { \
- TestObject tc; \
- return QTest::qExec(&tc, argc, argv); \
- }
看到了吧,非常简单,先是实例化一个SummerTest对象,然后调用QTest::qExec(),执行私有槽标识的所有测试方法,这里是testCase1(),QTest是个namespace,留心上面的SummerTest工程运行结果的话,会发现多了两个东东,initTestCase()和cleanupTestCase(),它们是测试框架自带的,即使不显式定义也会被调用,有点像C++的默认构造函数,前者在第一个测试方法执行前被调用,后者在最后一个测试方法执行后被调用,测试框架还提供了init()和cleanup(),它们分别在每一个测试方法执行的前后被调用,不显式定义时是不会执行的。除了QTEST_APPLESS_MAIN()外,测试框架还提供了两个类似的宏,QTEST_MAIN()和QTEST_GUILESS_MAIN(),用法相同。
Summer工程的编译运行也可以通过命令行来完成,有时候效果更好。
1、$qmake Summer.pro
使用qmake命令编译Summer.pro,生成MakeFile文件。
2、$make
使用make命令编译MakeFile,生成tst_summertest可执行文件,为什么可执行文件是tst_summertest而不是别的什么呢,这是因为在Summer.pro文件中指定了TARGET=tst_summertest,当然也可以设置成其它值。
3、$./tst_summertest
执行st_summertest,log输出到了终端,那么log可以输出到指定文件吗,答案是可以的,命令格式如下:
$./tst_summertest -o output_path
这时,log输出到了output_path指定的文件中,终端上不再显示log。
http://blog.csdn.net/ieearth/article/details/44964437
Qt单元测试浅析的更多相关文章
- Qt单元测试(QTestLib)
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:Qt单元测试(QTestLib) 本文地址:http://techieliang.co ...
- Qt单元测试工具 QTestlib(QVERIFY, QFETCH, QCOMPARE等)
优点: QTestLib提供了单元测试框架的基本功能,并提供了针对GUI测试的扩展功能. 特性 详细描述 轻量级 QTestlib 只包含 6000行代码和 60个导出符号. 自包含 对于非GUI测 ...
- Qt 单元测试
使用Qtcreator 自带的单元测试工具框架QTestlib进行测试. 一.创建一个单元测试程序 new project->other project ->Qt unit test ...
- Qt单元测试
单元测试之作用要完成测试用例,保证设计上的耦合依赖通过测试用例,保证覆盖率,提高程序质量 QTest一些有用的静态函数QTest::qExecQTest::qSleepQTest::qWait 例 ...
- Qt 事件系统浅析 (用 Windows API 描述,分析了QCoreApplication::exec()和QEventLoop::exec的源码)(比起新号槽,事件机制是更高级的抽象,拥有更多特性,比如 accept/ignore,filter,还是实现状态机等高级 API 的基础)
事件系统在 Qt 中扮演了十分重要的角色,不仅 GUI 的方方面面需要使用到事件系统,Signals/Slots 技术也离不开事件系统(多线程间).我们本文中暂且不描述 GUI 中的一些特殊情况,来说 ...
- Python单元测试浅析
测试的意义 人们针对一个具体问题,通过分析和设计,最后用编程语言写出了一个程序,如果它通过了语言解释器(编译器)的检查,可以运行了,那么下一步的工作就是设法确认它确实满足了我们需求.这篇文章就是讨 ...
- Qt绘图浅析与实例
1. Qt5位置相关函数 Q提供了很多关于获取窗体位置及显示区域大小的函数,如x().y()和pos().rect().size().geometry()等,统称为"位置相关函数" ...
- Qt 工程 pro文件
工作中,感觉pro文件的有些内容真不太懂,现系统性的学习一下.于此备录,分享共勉. 为了更好的理解,先创建一个简单的工程作为实践. [1]创建一个pro文件 1.1 新建proDemo工程.步骤如下: ...
- PyQt类库介绍
安装完PyQt后我们去看看这个库里面有些什么cd /usr/lib/python3/dist-packages/PyQt5/ && ls都是些.so的动态链接库,这就是为什么我们在安 ...
随机推荐
- TCP基础
TCP基础知识 复习 前言 说来惭愧,大二时候学的计算机网络好多都不太记得了,不过还好有认真学过,捡起来也挺快的,就是对于现在业界中使用的网络算法的不是很懂: 1 TCP报文段结构 1.1 序号和 ...
- 云主机CentOS 7新环境命令行搭建node工程步骤
1.用Node官网提供的命令安装node https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-d ...
- Android音频输入通道的底层硬件和软件开发分析
Android潜在的发展音频输入通道的软硬件分析 我们都知道耳机Mic集成在一直的那种四段耳机Mic插头是Android设备上比較经常使用.可是也会有分开的情况,比較假设在普通的PC机中装Androi ...
- WPF窗口继承实现统一风格的自定义窗口
如何实现一个窗口的风格(style),让所有的窗口都继承这样同样的风格,包括标题栏,放大.缩小和关闭按钮. 那么,我们可不可以就建立一个Base窗口,然后将这个窗口的风格给设计好之后,所有的窗口都继承 ...
- wpf控件开发基础(4) -属性系统(3)
原文:wpf控件开发基础(4) -属性系统(3) 知识回顾 接上篇,上篇我们真正接触到了依赖属性的用法,以及依赖属性的属性元数据的用法,并且也实实在在地解决了之前第二篇提到的一系列问题.来回顾一下 属 ...
- 深入理解ArrayList与LinkedList的区别
一.先来看看ArrayList与LinkedList 在JDK中所在的位置 从图中可以看出,ArrayList与LinkedList都是List接口的实现类,因此都实现了List的所有未实现的方法,只 ...
- Java编程思想里的泛型实现一个堆栈类
觉得作者写得太好了,不得不收藏一下. 对这个例子的理解: //类型参数不能用基本类型,T和U其实是同一类型. //每次放新数据都成为新的top,把原来的top往下压一级,通过指针建立链接. //末端哨 ...
- 实用WordPress后台MySQL操作命令
关键字: WordPress MySQL 后台 数据库 地址:http://www.cnblogs.com/txw1958/archive/2013/01/06/wordpress-sql.html ...
- Leetcode 94 Binary Tree Inorder Traversal 二叉树
二叉树的中序遍历,即左子树,根, 右子树 /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *lef ...
- Linux性能测试 ulimit命令
功能说明:控制shell程序的资源. 语 法:ulimit [-aHS][-c <core文件上限>][-d <数据节区大小>][-f <文件大 小>][-m &l ...