Qt学习之路——单元测试

测试不规范,亲人两行泪

在编程过程中,我们往往需要针对模块进行测试,特别是针对某些边界输入条件,从而保证程序的Robustness,本文将针对Qt下进行单元测试的过程进行讲解

编写测试

假设我们需要针对QString进行单元测试,首先,我们需要一个类包含测试函数,该类继承自QObject

1
2
3
4
5
6
7
#include <QtTest/QtTest>

class TestQString : public QObject{
Q_OBJECT
private slots:
void toUpper();
}

测试函数如下:

1
2
3
4
5
void TestQString::toUpper()
{
QString str = "Hello";
QVERIFY(str.toUpper() == "HELLO");
}

如果需要更详细的testlog,可以使用QCOMPARE()

1
2
3
4
5
void TestQString::toUpper()
{
QString str = "Hello";
QCOMPARE(str.toUpper(), QString("HELLO"));
}

之后加入这两句话进行测试:

1
2
QTEST_MAIN(TestQString)
#include "testqstring.moc" //如果类的定义和声明在一起,那么把这一句加上

执行测试

假设我们的test文件在一个空文件夹中被保存为testqstring.cpp ,那么我们可以使用qmake创建并产生一个makefile

1
2
3
/myTestDirectory$ qmake -project "QT += testlib"
/myTestDirectory$ qmake
/myTestDirectory$ make

注意,在测试过程中必须要把被测试文件放在和测试文件一个目录下,否则会造成:[Qt undefined reference to vtable,这个问题是由于MOC文件需要知道被测试文件所在位置,但是如果不在一个文件夹下,.pro文件不会自动把被测试文件添加进来,这里还需要改进。

参考文献

0%