参考:http://javajiel.blog.sohu.com/158423807.html
QT中QTest的用法
最简单模式:见simplest文件夹
在pro文件中添加一下代码段。
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = myqttest
TEMPLATE = app
isEqual(QT_MAJOR_VERSION, 5) {
QT += testlib
} else { # if not Qt5
CONFIG += qtestlib
}
SOURCES +=\
test.cpp
HEADERS += \
test.h
新建一个类,继承自QObject
也必须继承自QObject
,头文件中在还要定义私有的槽函数,cpp文件中添加头文件
#ifndef TEST_H
#define TEST_H
#define FIRST
#include <QObject>
class Test : public QObject
{
Q_OBJECT
public:
explicit Test(QObject *parent = 0);
private slots:
void toUpper();
};
#endif // TEST_H
cpp文件
#include "test.h"
#include <QTest>
QTEST_MAIN(Test)
Test::Test(QObject *parent) :
QObject(parent)
{
}
void Test::toUpper()
{
QString str = "Hello";
QVERIFY(str.toUpper() == "HELLO");
}
注意:
QTEST_MAIN()宏将扩展成一个简单的main()函数,该main()函数会执行所有的测试函数。注意:如果测试类的声明和实现都在同一个cpp文件中,需要包含产生的moc文件,以使Qt的内省机制起作用。(未测试)
在用QCOMPARE宏时,函数执行结果要与给定结果匹配,否则测试失败,
“`
QCOMPARE(QString(“HELLO”).toUpper(), QString(“HELLO”));
// QCOMPARE(QString(“HELLO”).toUpper(), QString(“HO”));
第一句通过,第二句FAIL!输出结果如下
>> : Test::toUpper1() Compared values are not the same
Actual (QString("HELLO").toUpper()): "HELLO"
Expected (QString("HO")) : "HO"
..\..\zack8712-learn\myqttest\simplestExtend\test.cpp(23) : failure location
#####扩展
>
1. 为了不使测试函数被重复的代码弄得凌乱不堪,QTestLib 支持向测试函数增加测试数据。我们要做的,仅仅是向测试类增加另一个私有槽:一个为测试函数提供数据的函数必须与该测试函数同名,并加上_data后缀
详见:simpleatExtend中
>```cpp
void Test::toUpper_data()
{
QTest::addColumn<QString>("string");
QTest::addColumn<QString>("result");
QTest::newRow("all lower") << "hello" << "HELLO";
QTest::newRow("mixed") << "Hello" << "HELLO";
QTest::newRow("all upper") << "HELLO" << "HELLO";
}
源代码下载:http://download.csdn.net/detail/zack8712/8521969
git下载:https://code.csdn.net/zack8712/qtproject(见simplest文件夹)