Trolltech公司提供的QTestlib框架,是一种针对基于QT编写的程序或库的单元测试工具。QTestLib提供了单元测试框架的基本功能,并提供了针对GUI测试的扩展功能。

目录:

QTestlib特性

设计QTestLib的目标是为了简化QT程序或库的单元测试工作。

特性

详细描述

轻量级

QTestlib只包含6000行代码和60个导出符号。

自包含

对于非GUI测试,QTestlib只需要Qt核心库的几个符号。

快速测试

QTestlib不需要特殊的测试执行程序,不需要为测试而进行特殊的注册。

数据驱动测试

一个测试程序可以在不同的测试数据集上执行多次。

基本的GUI测试

QTestlib提供了模拟鼠标和键盘事件的功能。

IDE友好

QTestlib的输出信息可以被Visual Studio和KDevelop解析。

线程安全

错误报告是线程安全的、原子性的。

类型安全

对模板进行了扩展使用,防止由隐式类型转换引起的错误。

易扩展

用户自定义类型可以容易地加入到测试数据和测试输出中。

注意:对于高级的GUI和应用程序测试需求,请参考Trolltech合作伙伴提供的测试产品。(译者注:如FROGLOGIC提供的Squish工具)

QTestLib API

所有公有的方法都在QTest命名空间中。另外,QSignalSpy类为QT的信号和槽提供了简单的内省机制。

使用QTestLib

编写一个测试程序

编写一个测试程序,需要从QObject类派生一个子类并加入一个或者多个私有槽。每一个私有槽都是一个测试函数。QTest::qExec()函数用于执行测试对象中所有的测试函数。

另外,有4种私有槽不能作为测试函数。他们由测试框架执行,可为整个测试程序或当前测试函数进行初始化和清除操作。

  • initTestCase()会在第一个测试函数执行前调用。1

  • cleanupTestCase()会在最后一个测试函数执行后调用。

  • init()会在每一个测试函数执行前调用。

  • cleanup()会在每一个测试函数执行后调用。

如果initTestCase()函数执行失败,任何测试函数都不会执行。如果init()函数执行失败,紧随其后的测试函数不会被执行,测试会继续处理下一个测试函数。

例子:

class MyFirstTest: public QObject

{

Q_OBJECT

private slots:

void initTestCase()

{

             qDebug("called before everything else");

        }

void myFirstTest()

{

            QVERIFY(1 == 1);

        }

void mySecondTest()

{

            QVERIFY(1 != 2);

        }

void cleanupTestCase()

{

            qDebug("called after myFirstTest and mySecondTest");

        }

};

更多测试例子,请参阅QTestLib Tutorial

编译一个测试程序

如果使用qmake作为编译工具,只需在project文件中增加移行:

QT += testlib (注意,此处有错,应为CONFIG += qtestlib)

如果使用其它的编译工具,确保把QTestLib的头文件加入到include路径(通常是Qt安装路径下的include/QtTest目录)。如果你要创建Qt程序的发行版本,将测试程序链接到QtTest库。如果你要创建Qt程序的调试版本,使用QtTest_debug。

参阅:QTestLib Tutorial

QTestlib命令行参数

语法

执行自动测试的语法接收下列简单形式:

testname [options] [testfunctions[:testdata]]...

用你的可执行文件替换testname。testfunctions包含要执行的测试函数名,如果不指定testfunctions,所有的测试函数都会执行。如果测试函数名之后加上了测试数据行的名字,则测试函数执行时只会使用该行测试数据。

列如:

/myTestDirectory$ testQString toUpper

使用所有的测试数据执行toUpper测试函数。

/myTestDirectory$ testQString toUpper toInt:zero

使用所有的测试数据执行toUpper测试函数,使用行名为zero的测试数据执行toInt测试函数(如果对应的测试数据不存在,相关的测试执行时就会失败)。

/myTestDirectory$ testMyWidget -vs -eventdelay 500

执行testMyWidget测试程序,输出每一个信号发射信息,在每次模拟鼠标/键盘事件之后等待500毫秒。

选项

下列命令行参数可以被接受:

  • -help

输出命令行参数的帮助信息。

  • -functions

输出测试中的所有测试函数。

  • -o filename

将输出信息写入到执行文件中,而不是打印到标准输出上。

  • -silent

沉默地输出,只显示警告、错误和最少的状态信息。

  • -v1

详细输出;输出每次进入或离开测试函数的信息。

  • -v2

详细输出;也输出每个QCOMPARE()和QVERIFY()信息。

  • -vs

输出发出的所有信号。

  • -xml

将输出格式化成XML格式,而不是普通文本

  • -lightxml

输出成XML标签流。

  • -eventdelay ms

如果键盘或鼠标模拟(QTest::keyClick(),QTest::mouseClick()等)不指定延迟时间,则使用该参数(以毫秒为单位)作为延迟时间。

  • -keydelay ms

与-eventdelay的作用一样,但只影响键盘模拟的延迟时间,不影响鼠标模拟的延迟时间。

  • -mousedelay ms

与-eventdelay的作用一样,但只影响鼠标模拟的延迟时间,不影响键盘模拟的延迟时间。

  • -keyevent-verbose

详细输出键盘模拟信息。

  • -maxwarnings numberBR

设置警告信息的最大数量,0表示不限制,默认值为2000。

在Windows CE上远程使用QTestLib

cetest能够帮助用户方便地在Windows CE设备或模拟器上加载应用程序,并且它需要在单元测试被成功编译后才能执行。

加载前,下列文件将拷贝到设备上:

  • 该工程链接的所有Qt库

  • QtRemote.dll

  • 安装时指定的c运行库

  • .pro文件中DEPLOYMENT规则指定的所有文件

使用cetest

语法

执行自动测试的语法接受下列简单形式:

cetest [options] ...

选项

cetest不仅提供了与非交叉编译平台相同的选项,参考Command Line Arguments,而且增加了下列选项:

  • -debug

在调试模式下编译测试程序。

  • -release

在发行模式下编译测试程序。

  • -libpath path

指明拷贝Qt库的目标路径。

  • -qt-delete

执行结束后删除Qt库。

  • -project-delete

执行结束后删除工程文件。

  • -delete

执行结束后删除工程文件和Qt库。

  • -conf

指定一个将被部署到远程路径中的qt.conf文件

注意:debug是默认的编译选项。

QtRemote

QtRemote是在QTestLib之后编译的一个小的库。它允许主机系统创建一个在远程设备上运行的进程,并等待其执行结束。

约束条件

cetest使用Microsoft ActiveSync建立主机和设备之间的远程连接,顺利编译cetest 和QtRemote需要与之相关的头文件和库。

安装Qt之前,需要正确设置INCLUDE和LIB环境变量。

Pocket PC上Windows Mobile 5的默认安装可通过下述方式得到:

set INCLUDE=C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Activesync\Inc;%INCLUDE%

set LIB=C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Activesync\Lib;%LIB%

注意Qt会记住该路径,因此即使切换到交叉编译环境,你也不需要重新设置它。

QTestlib Manual翻译的更多相关文章

  1. log4j配置webapp日志系统

    1.基础知识: Log4j的中文文档 (这是根据最新的log4j(jakarta-log4j-1.2.8)的开发包自带文档的manual翻译的) http://dev.csdn.net/develop ...

  2. 优化脚本性能 Optimizing Script Performance

    This page gives some general hints for improving script performance on iOS. 此页面提供了一些一般的技巧,提高了在iOS上的脚 ...

  3. Manual——Test (翻译1)

    LTE Manual ——Logging(翻译) (本文为个人学习笔记,如有不当的地方,欢迎指正!) 1.17.3 Testing framework(测试框架)   ns-3 包含一个仿真核心引擎. ...

  4. LTE Manual ——Logging(翻译)

    LTE Manual ——Logging(翻译) (本文为个人学习笔记,如有不当的地方,欢迎指正!) 9 Logging   ns-3 日志功能可以用于监测或调试仿真程序的进展.日志输出可以通过 ma ...

  5. [翻译]QT core wallet manual 狗狗币核心钱包使用教程

    译注:比特币没赶上可以玩狗狗币啊,水电厂包不起可以用CPU挖啊.为了顺应时代潮流,了解一下区(fa)块(heng)链(cai)和加密货币技术,准备从研究狗狗币开始.网上找了一圈没有看到很好的入门级教程 ...

  6. 【socket编程】select manual page翻译

    原文: select manual page 依赖的头文件 /* According to POSIX.1-2001, POSIX.1-2008 */ #include <sys/select. ...

  7. trove manual installation 翻译

    目标 此文件提供了一步一步的指导手动安装trove在一个现有OpenStack的环境为了开发. 该文件将不包括: OpenStack的设置 trove服务配置 要求 正在运行的OpenStack的环境 ...

  8. 开始进行lammps手册的学习啦,跟着Manual一边翻译一边做吧!(转载)

    转载自:http://blog.sina.com.cn/s/blog_64813e370100ngsz.html 注明:黄色部分基本上为不懂的部分,红色字体为所做注释 一.各种文件的介绍: 1 in ...

  9. Unity性能优化(3)-官方教程Optimizing garbage collection in Unity games翻译

    本文是Unity官方教程,性能优化系列的第三篇<Optimizing garbage collection in Unity games>的翻译. 相关文章: Unity性能优化(1)-官 ...

随机推荐

  1. C# ITextShap 生成PDF 下载

    using iTextSharp.text; using iTextSharp.text.pdf; //创建 Document Document pdfDoc = new Document(new R ...

  2. 三个重要的游标sp_cursoropen

    請問這三個存諸過程的作用是什么﹖ sp_cursoropen, sp_cursorfetch, sp_cursorclose API 服务器游标实现  SQL Server OLE DB 提供程序. ...

  3. 伪协议触发onbeforeunload

    根据MSDN描述,IE的onbeforeunload事件触发条件: 简单点来说就是页面URL发生改变时触发: * 关闭浏览器窗口 * 点击后退.前进.刷新.主页 * 点击链接到新页面 * 调用超链接的 ...

  4. Rescue--hdu1242

    Rescue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Subm ...

  5. 鼠标点击变色 lvha

    a标签有四个"状态"的先后过程是:a:link ->a:hover ->a:active ->a:visited.另外,a:active不能设置有无下划线(总是有 ...

  6. 开发反模式(GUID) - 伪键洁癖

    一.目标:整理数据 有的人有强迫症,他们会为一系列数据的断档而抓狂. 一方面,Id为3这一行确实发生过一些事情,为什么这个查询不返回Id为3的这一行?这条记录数据丢失了吗?那个Column到底是什么? ...

  7. 深入浅出CChart 每日一课——第十八课 女神的套娃,玩转对话框

    前面笨笨已经给大家展示了CChart编程的N个例子.这些例子中,我们的CChart图像都是绘制在程序的主窗口中的. 在很多情况下,我们面对的情形不是这样的.这节课笨笨就给大家介绍一下怎样在对话框中用C ...

  8. 一道有关球赛队员分配的C++程序题目

    题目描述: 两个球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人.已经抽签决定比赛名单. 有人向队员打听比赛安排的名单.a说他不和x比,c说他不和x,z比,请编程找出三队赛手的名单. ...

  9. Angular学习笔记(2)——TODO小应用

    Angular学习笔记(2)--TODO小应用 1. 写在前面 之前我们跑了Angular的Hello World,你是不是对它有点感觉了呢?这一篇将结合一个TODO程序来继续学习Angular的用法 ...

  10. python学习之路-6 冒泡算法、递归、反射、os/sys模块详解

    算法 冒泡算法 # 冒泡算法就是将需要排序的元素看作是一个个"气泡",最小的"气泡"最先浮出水面,排在最前面.从小到大依次排列. # 代码如下: li = [9 ...