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. ifstream中文路径问题分析

    最近维护一个项目,遇到了ifstream在中文路径下打开文件失败的bug,我搜索了一下,最后整理成下文以后日后查阅. 一.问题重现 vs2008下创建一个简单win32工程. 使用ANSI编码方式:项 ...

  2. 【JAVA编码专题】JAVA字符编码系列一:Unicode,GBK,GB2312,UTF-8概念基础

    这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...

  3. JS+css滑动菜单简单实现

    JS+css滑动菜单 制作一个简单的滑动菜单,当鼠标指向菜单标题时,滑出二级菜单.移开时二级菜单隐藏.目标很简单,实践时有一些细节需要注意,比如鼠标移向二级菜单的 过程中,二级菜单消失了.还有定位出错 ...

  4. 列表:一个打了激素的数组2 - 零基础入门学习Python011

    列表:一个打了激素的数组2 让编程改变世界 Change the world by program 从列表中获取元素 跟数组一样,我们可以通过元素的索引值(index)从列表获取单个元素,注意,列表索 ...

  5. HTTP 协议简介

    HTTP 协议简介 博客分类: acl开发--HTTP协议篇 网络协议http协议  一.TCP/IP 协议介绍 在介绍 HTTP 协议之前,先简单说一下TCP/IP协议的相关内容.TCP/IP协议是 ...

  6. BZOJ 1070 修车(最小费用流)

    链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1070 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术 ...

  7. Microsoft Certification List

    Exam Title Files 70-178 Microsoft Project 2010, Managing Projects 16 70-243 Administering and Deploy ...

  8. linux type 命令和Linux的五个查找命令

    type命令用来显示指定命令的类型.一个命令的类型可以是如下之一 alias 别名 keyword 关键字,Shell保留字 function 函数,Shell函数 builtin 内建命令,Shel ...

  9. 提高效率的便签By番茄时间管理 win7标签,小功能,大作用

    今日待办 把一些重要的事情,列入其中. 着重处理. 活动清单 罗列一些最近需要做的事情,不一定按照紧急重要的程度. 把活动清单中的事情,按照实际情况,安排到今日待办当中. 还有一个我喜欢的'头脑风暴' ...

  10. cf448B Suffix Structures

    B. Suffix Structures time limit per test 1 second memory limit per test 256 megabytes input standard ...