Trolltech公司提供的QTestlib框架,是一种针对基于QT编写的程序或库的单元测试工具。QTestLib提供了单元测试框架的基本功能,并提供了针对GUI测试的扩展功能。html
设计QTestLib的目标是为了简化QT程序或库的单元测试工做。windows
特性api
详细描述安全
轻量级框架
QTestlib只包含6000行代码和60个导出符号。函数
自包含工具
对于非GUI测试,QTestlib只须要Qt核心库的几个符号。单元测试
快速测试测试
QTestlib不须要特殊的测试执行程序,不须要为测试而进行特殊的注册。ui
数据驱动测试
一个测试程序能够在不一样的测试数据集上执行屡次。
基本的GUI测试
QTestlib提供了模拟鼠标和键盘事件的功能。
IDE友好
QTestlib的输出信息能够被Visual Studio和KDevelop解析。
线程安全
错误报告是线程安全的、原子性的。
类型安全
对模板进行了扩展使用,防止由隐式类型转换引发的错误。
易扩展
用户自定义类型能够容易地加入到测试数据和测试输出中。
注意:对于高级的GUI和应用程序测试需求,请参考Trolltech合做伙伴提供的测试产品。(译者注:如FROGLOGIC提供的Squish工具)
全部公有的方法都在QTest命名空间中。另外,QSignalSpy类为QT的信号和槽提供了简单的内省机制。
编写一个测试程序,须要从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。
语法
执行自动测试的语法接收下列简单形式:
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。
cetest可以帮助用户方便地在Windows CE设备或模拟器上加载应用程序,而且它须要在单元测试被成功编译后才能执行。
加载前,下列文件将拷贝到设备上:
该工程连接的全部Qt库
安装时指定的c运行库
.pro文件中DEPLOYMENT规则指定的全部文件
语法
执行自动测试的语法接受下列简单形式:
cetest [options] ...
选项
cetest不只提供了与非交叉编译平台相同的选项,参考Command Line Arguments,并且增长了下列选项:
-debug
在调试模式下编译测试程序。
-release
在发行模式下编译测试程序。
-libpath path
指明拷贝Qt库的目标路径。
-qt-delete
执行结束后删除Qt库。
-project-delete
执行结束后删除工程文件。
-delete
执行结束后删除工程文件和Qt库。
-conf
指定一个将被部署到远程路径中的qt.conf文件
注意:debug是默认的编译选项。
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会记住该路径,所以即便切换到交叉编译环境,你也不须要从新设置它。