Qt的Unit Test Framework简介

原创 2009年06月20日 16:12:00

(此处为人肉维护的镜像,原文请见:http://csbabel.wordpress.com/   翻墙请用Google Reader查看:http://csbabel.wordpress.com/feed/ )

 

在国内的编程界,QT常常是 不入程序员的法眼的,但平时能够听到的批评却有很多——大部分是对着MOC的。 其实QT有许多的好东西,比如在内部使用BSP管理数百万级别绘图对象的Graphics View Framework (这里说的BSP就是游戏编程中用的那个BSP)。除管理海量对象、3维变形、动画管理等功能之外,Graphics View Framework还能基于OpenGL渲染,而不用编写任何gl-开头的函数。

本文要介绍的是QT中的轻量级Unit Test Framework。既然要介绍的是代码框架,我就少喷方块字,直接先上一碟appetizer先:

代码

sample.cpp的内容:

01  #include <QtTest/QtTest>

02  class My1stUT : public QObject
03  {
0 4      Q_OBJECT

05  private slots:
06      void initTestCase()
07      {
08      }

09      void cleanupTestCase()
10      {
11      }

12      void testAdd()
13      {
14          QVERIFY(1 + 1 == 2);

15          QBENCHMARK
16          {
17              QString (100 * 1024 * 1024, ‘6′);
18              QString (100 * 1024 * 1024, ‘4′);
19          }
20      }
21  };

22  QTEST_MAIN(My1stUT)
23  #include “sample.moc”

上 面的代码构成了一个完整的单元测试。其中,slots是一个扩展关键字,Q_OBJECT用来声明一些专有的macro,#include用来包含头文件 和MOC的结果,QTEST_MAIN用来生成程序的主入口函数:main(int argc, char** argv)。

程序的主要 部分是三个member functions:initTestCase, cleanupTestCase和testAdd。其中,前两个名字是固定的,被测试系统默认调用的函数:initTestCase函数是第一个执行的测 试函数,用来为测试准备环境,如果没有需要,这个函数可以不写。cleanupTestCase的作用是在退出测试前清理资源,如果用不上,这个函数也可 以不写。

testAdd是实际的用户编写的测试函数,可以写任意多个函数,每个函数的名字也可以任意取(不一定要以test-开头)。这 些函数都会被当成测试用例,在最终生成的可执行程序中运行。与某些C++的测试框架不同,在这里我们不需要去任何地方注册这些测试用例。另外,这些函数的 名字可以在命令行中作为参数,用来手工指定运行哪一个测试。

testAdd中的程序行就是要编写的单元测试了,可以使用QCOMPARE和QVERIFY进行测试断言,还可以用QBENCHMARK测试性能。

编译

编译的过程也很简单,新建一个文件夹,比如名叫test,将sample文件放入,然后运行
1. qmake -project “QT += testlib”
2. qmake
3. make
即可得到可执行程序test.exe(此程序的名字取决于文件夹的名字)

运行

在命令行敲入test.exe -silent,得到如下结果:

Testing My1stUT

RESULT : My1stUT::testAdd():
1,141 msec per iteration (total: 1141, iterations: 1)
Totals: 3 passed, 0 failed, 0 skipped

大功告成!最后介绍一下test.exe的参数(这些参数都是QTEST_MAIN这个macro 自动生成的,不用手工编写任何代码)

Usage: test.exe [options] [testfunction[:testdata]]…
By default, all testfunctions will be run.

options:
-functions : Returns a list of current testfunctions
-xml       : Outputs results as XML document
-lightxml  : Outputs results as stream of XML tags
-o filename: Writes all output into a file
-silent    : Only outputs warnings and failures
-v1        : Print enter messages for each testfunction
-v2        : Also print out each QVERIFY/QCOMPARE/QTEST
-vs        : Print every signal emitted
-eventdelay ms    : Set default delay for mouse and keyboard simulation to ms milliseconds
-keydelay ms      : Set default delay for keyboard simulation to ms milliseconds
-mousedelay ms    : Set default delay for mouse simulation to ms milliseconds
-keyevent-verbose : Turn on verbose messages for keyboard simulation
-maxwarnings n    : Sets the maximum amount of messages to output.
0 means unlimited, default: 2000

Benchmark related options:
-tickcounter    : Use CPU tick counters to time benchmarks
-eventcounter   : Counts events received during benchmarks
-minimumvalue n : Sets the minimum acceptable measurement value
-iterations  n  : Sets the number of accumulation iterations.
-median  n      : Sets the number of median iterations.
-vb             : Print out verbose benchmarking information.

-help      : This help

附录

没有提及的其它主要特性
1、在命令行给出测试数据
2、编程方式提供的GUI键鼠事件测试(非屏幕录制方式)
3、线程安全:框架产生的错误消息是线程安全的

最后还要说一句:QT的正确读法是cute,不要读成queue-tee

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Qt单元测试框架

QTestLib 框架提供了一个简单易用的单元测试框架,需要在工程文件中添加Qt+=testlib。先看一个简单的例子 : [cpp] view plain copy ...

Qt Testlib 基本使用 (1)

Qt Testlib 基本功能就是测试class的功能函数。   这个class 必须继承自QObject。 包含Qt Testlib的头文件 #include class TestQStrin...

便捷的使用QtTest进行批量单元测试

便捷的使用QtTest进行批量单元测试QTestRunner类用于管理被测试类对象,便于进行单元测试:代码如下:qtestrunner.h#ifndef TESTRUNNER_H #define TE...

利用google test 与QTest进行GUI 测试

利用google test 与QTest进行GUI 测试 Jingwenlai 2009-11-10 Google test写测试用例非常方便,而且相对于QTest来说,提供了更多的比较宏...

Qt单元测试框架

QTestLib框架提供了一个简单易用的单元测试框架,需要在工程文件中添加Qt+=testlib。先看一个简单的例子:#include class TestQString: public QObjec...
  • zhu_xz
  • zhu_xz
  • 2009-12-25 16:03
  • 13895

Symbian OS Unit Test Framework

  • 2007-06-01 20:18
  • 600KB
  • 下载

c语言实现一个单元测试框架(Unit Test Framework)代码

csdn lidp  转载注明出处 此单元测试框架为我在google code上的开源项目spider-tool的一部分, 关于spider-tool,欢迎访问google c...

使用 Visual Studio 2005 Team System 进行单元测试并生成用于 Unit Test Framework 的源代码(详解)

[原英文链接]:    Visual Studio 2005 Technical Articles    Author:Scott Dockendorf      ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)