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# ITextSharp pdf 自动打印

    PDF生成后直接进入打印预览不用下载 using iTextSharp.text; using iTextSharp.text.pdf; Document pdfDoc = new Document( ...

  2. Linux下Tomcat的安装配置 去掉应用名称

    http://blog.csdn.net/zhuying_linux/article/details/6583096/ Tomcat下为每个Web应用配置不同的访问端口 http://www.linu ...

  3. JSONP有什么作用

    1.解决跨域访问数据                 由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名.协议.端口)的资源,为了实现跨域请求,可以通过script标签实现跨域请求 ...

  4. fiddler2使用文档

    http://www.trinea.cn/android/android-network-sniffer/

  5. android 监听app进入后台以及从后台进入前台

    package com.pinshang.base; import com.pinshang.common.CommonValue; import com.pinshang.investapp.Ent ...

  6. [算法导论]练习2-4.d求排列中逆序对的数量

    转载请注明:http://www.cnblogs.com/StartoverX/p/4283186.html 题目:给出一个确定在n个不同元素的任何排列中逆序对数量的算法,最坏情况需要Θ(nlgn)时 ...

  7. AngularJS 父子控制器

    <!doctype html> <html ng-app="myApp"> <head> <script src="C:\\Us ...

  8. js 非IE火狐插件检测

    js检测代码Html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...

  9. IIS7 MVC网站生成、发布

    imihiro IIS7 MVC网站生成.发布 (1)生成. 确保System.Web.Mvc.dll在bin目录下 (2)发布网站到文件系统 (3)在IIS中为网站添加应用程序池(一个虚拟目录,一个 ...

  10. AutoResetEvent 类的使用说明

    AutoResetEvent 类 官方描述:通知正在等待的线程已发生事件 命名空间:System.Threading 程序集:mscorlib 继承于:System.Threading.WaitHan ...