第一次使用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

目录
相关文章
|
计算机视觉 Windows
Qt实用技巧:实现窗口透明的五种方法
Qt实用技巧:实现窗口透明的五种方法
Qt实用技巧:实现窗口透明的五种方法
|
编解码 C++ Windows
QT软件开发: QProcess启动进程完成交互并获取输出
QT软件开发: QProcess启动进程完成交互并获取输出
2025 0
QT软件开发: QProcess启动进程完成交互并获取输出
|
测试技术 C++
QTest测试框架,Gui测试
QTest测试框架,Gui测试
|
5月前
|
消息中间件 人工智能 Serverless
函数计算FC降价全解析,最高幅度达93%,怎么用才便宜?
今年云栖大会,函数计算3.0全新升级,相对函数计算2.0,3.0版本突出易用性、高弹性,并且可以和更多阿里云服务无缝集成。业内首发神龙 Serverless GPU 架构,冷启动大幅优化,全链路调度延时降低 80%,函数执行性能波动率降低 70%;作为事件驱动的全托管计算服务,足够轻量灵活,让用户以更少的代码,更好、更快地实现业务创新。函数计算 FC 通过大规模的资源池化和调度策略优化实现降本,阶梯定价最高降幅可达 93%。
函数计算FC降价全解析,最高幅度达93%,怎么用才便宜?
|
10月前
|
存储 C++ 开发者
QListWidget和QListView的使用和item点击事件
QListWidget和QListView的使用和item点击事件
|
XML 测试技术 程序员
QTest单元测试框架,简单,好用,高效
QTest单元测试框架,简单,好用,高效
anaconda创建一个新的虚拟环境
anaconda创建一个新的虚拟环境
anaconda创建一个新的虚拟环境
|
测试技术 C++
QTest测试框架,多数据测试
QTest测试框架,多数据测试
|
C++
C/C++ Qt StatusBar 底部状态栏应用
Qt窗体中默认会附加一个QstatusBar组件,状态栏组件位于主窗体的最下方,其作用是提供一个工具提示功能,当程序中有提示信息是可以动态的显示在这个区域内,状态栏组件内可以增加任何Qt中的通用组件,只需要通过`addWidget`函数动态追加即可引入到底部,底部状态栏在实际开发中应用非常普遍,以下代码是对该组件基本使用方法的总结。
395 0
C/C++ Qt StatusBar 底部状态栏应用
|
C++
QT | VS2017 + Qt5.14.2环境搭建
手把手教你大搭建 VS2017 + Qt5.14.2 开发环境。
722 0