第一次使用QtTest

简介: 之前c++代码用过cppunit,然后开始用gtest,对于qt代码,第一次尝试使用QtTest框架。 要使用QtTest,首先需要在.pro文件中增加配置,让qmake知道要添加qt测试框架: [cce] CONFIG += qtestlib [/cce] 然后,就可以新建一个cpp文件

之前c++代码用过cppunit,然后开始用gtest,对于qt代码,第一次尝试使用QtTest框架。
要使用QtTest,首先需要在.pro文件中增加配置,让qmake知道要添加qt测试框架:
[cce]
CONFIG += qtestlib
[/cce]
然后,就可以新建一个cpp文件,编写测试代码了:
[cce lang=”cpp”]
#include <QtTest/QtTest>

#include "../src/twitterapi.h"

class TwitterApiTest : public QObject
{
Q_OBJECT
private slots:
void testRequestToken();
};

void TwitterApiTest::testRequestToken()
{
Setting s;
s.twitterUrl = "https://api.twitter.com/1";

TwitterApi api(&s);
QSignalSpy spy(&api, SIGNAL(authUrlCreated(bool,QString,Token*)));
bool result = api.authUrl();

QVERIFY(result);

QTest::qWait(10000);

QVERIFY(spy.isValid());
QCOMPARE(spy.count(), 1);

QList<QVariant> arguments = spy.takeFirst();
QVERIFY(arguments.at(0).toBool() == true);
qDebug() << arguments.at(1);
}

QTEST_MAIN(TwitterApiTest)

#include "TwitterApiTest.moc"
[/cce]
QtTest相关的函数和宏都在QtTest/QtTest中,直接都include进来即可,我主要用到了里面的QSignalSpy类。
测试类和普通qt类一样,需要继承QObject,所有的测试函数,都声明为私有槽函数(private slots)。这里的测试函数,主要使用了QSignalSpy类,可以用这个类来检测对应的信号是否已经发出,还可以获取信号的参数。QtTest还提供了一些断言宏,具体可以查看assistant中QTest的文档。
每个测试类都需要使用QTEST_MAIN宏生成一个最终的main函数,make之后会生成一个对应的可执行文件。最后,如果测试类声明和实现在一个cpp文件中,需要手工include生成的moc文件。
感觉QtTest没有像cmake中的test那样好的和makefile进行结合,没有增加执行测试的阶段。需要手工运行生成的可执行程序:
[cce]
jinlingjie@babydragon ~/work/aflatoxin-build-desktop-Qt_in_PATH___ $ ./aflatoxin
********* Start testing of TwitterApiTest *********
Config: Using QTest library 4.8.1, Qt 4.8.1
PASS : TwitterApiTest::initTestCase()
QWARN : TwitterApiTest::testRequestToken() Don’t know how to handle ‘Token*’, use qRegisterMetaType to register it.
QDEBUG : TwitterApiTest::testRequestToken() oauth head: “OAuth oauth_callback=”——-“,oauth_consumer_key=”———–“,oauth_nonce=”———–“,oauth_signature=”———–“,oauth_signature_method=”HMAC-SHA1″,oauth_timestamp=”1333445034″,oauth_version=”1.0″”
QWARN : TwitterApiTest::testRequestToken() content-type missing in HTTP POST, defaulting to application/octet-stream
QDEBUG : TwitterApiTest::testRequestToken() request token reply: “oauth_token=———&oauth_token_secret=———–&oauth_callback_confirmed=true”

QDEBUG : TwitterApiTest::testRequestToken() QVariant(QString, “https://api.twitter.com/oauth/authorize?oauth_token=————-“)
PASS : TwitterApiTest::testRequestToken()
PASS : TwitterApiTest::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped
********* Finished testing of TwitterApiTest *********
[/cce]


转载自:https://coolex.info/blog/306.html

目录
相关文章
|
7月前
|
缓存 Linux 定位技术
Qt绘图指南:掌握高效、美观的GUI设计之道
Qt绘图指南:掌握高效、美观的GUI设计之道
1517 1
|
7月前
|
Shell 网络安全 开发工具
还不会 Git?最详细教你学会 Git + TortoiseGit 安装使用及提交代码!
还不会 Git?最详细教你学会 Git + TortoiseGit 安装使用及提交代码!
323 0
|
测试技术
[googletest] --- 简易使用教程
[googletest] --- 简易使用教程
433 0
|
测试技术 C++
QTest测试框架,Gui测试
QTest测试框架,Gui测试
|
缓存 Java
《QT从基础到进阶·二十》QThreadPool线程池的使用
《QT从基础到进阶·二十》QThreadPool线程池的使用
992 0
《QT从基础到进阶·十九》QThread多线程使用
《QT从基础到进阶·十九》QThread多线程使用
153 0
|
架构师 搜索推荐 IDE
架构师13年经验而成的软件平台架构设计与技术管理之道终于曝光了
前言 关于软件平台架构设计与技术管理之道的介绍: 计算机技术的发展日新月异,市面上软件架构、项目管理、IT技术类书籍层出不穷,从软件专业和技术视角进行阐述的居多,但对技术烂熟于胸,还是无法保证你能成为优秀架构师或驾驭平台的技术负责人。
191 0
|
测试技术 Linux C++
gtest单元测试框架介绍及简单使用
gtest单元测试框架介绍及简单使用
|
XML 测试技术 程序员
QTest单元测试框架,简单,好用,高效
QTest单元测试框架,简单,好用,高效
|
人工智能 编译器 异构计算
FPGA(3)--VHDL及原理图--4位全加器
FPGA(3)--VHDL及原理图--4位全加器
664 0
FPGA(3)--VHDL及原理图--4位全加器
下一篇
DataWorks