本文介绍Qt的单元测试框架是什么,有什么用和怎么快速使用它。
1.是什么?
Qt单元测试框架除了提供单元测试框架的基本功能外还提供了针对GUI测试的扩展功能。一般单元测试意义上是指对软件中的最小可测试单元进行检查和验证,其中最小测试单元可以为某个功能点,某个类,某个函数,甚至是某个行为等等。
2.有什么用?
- 加快开发效率;
- 提高程序质量。
3.怎么使用?(图解)
选择其他项目->Auto Test Project。
输入项目名与选择项目目录。
3.选择一个单元测试的类名(这里是AutoTest
)
Requires QApplication
选项为程序添加QApplication类;Generate initialization and cleanup code
选项为添加初始化与清除代码(函数)。
4.选择编译环境。
5.最后创建完成。
6.项目目录
4.使用技巧
以AutoTest测试类为例(文末源码),自动执行带有private slots
标记的函数,并会顺序执行。
initTestCase
是默认第一执行函数(系统自带),用于初始化一些数据和行为;cleanupTestCase
是默认最后执行函数(系统自带),用于清理资源和重置状态的操作。1
2
3
4
5private slots:
void initTestCase(); /* 可选 */
void test_case1();
void test_case2();
void cleanupTestCase(); /* 可选 */
测试工具(测试验证函数)
- 为验证被测试函数的结果,需要使用QTest提供的测试函数。
验证函数 | 用途 |
---|---|
QVERIFY(bool) | 验证参数是否为真 |
QCOMPARE(actual, expected) | 验证实际参数是否跟期望值一致 |
- 示例:
1
2
3
4
5
6
7void AutoTest::test_case1()
{
QString name("AutoTest");
bool isEnable = true;
QVERIFY(isEnable);
QCOMPARE(name, QString("AutoTest"));
}
5.附录
AutoTest.pro
1
2
3
4
5
6
7
8
9QT += testlib
QT -= gui
CONFIG += qt console warn_on depend_includepath testcase
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += tst_autotest.cpptst_autotest.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// add necessary includes here
class AutoTest : public QObject
{
Q_OBJECT
public:
AutoTest();
~AutoTest();
private slots:
void initTestCase();
void test_case1();
void test_case2();
void cleanupTestCase();
};
AutoTest::AutoTest()
{
}
AutoTest::~AutoTest()
{
}
void AutoTest::initTestCase()
{
}
void AutoTest::test_case1()
{
QString name("AutoTest");
bool isEnable = true;
QVERIFY(isEnable);
QCOMPARE(name, QString("AutoTest"));
}
void AutoTest::test_case2()
{
}
void AutoTest::cleanupTestCase()
{
}
QTEST_APPLESS_MAIN(AutoTest)输出信息
1
2
3
4
5
6
7Config: Using QtTest library 5.12.2, Qt 5.12.2 (x86_64-little_endian-llp64 shared (dynamic) debug build; by GCC 7.3.0)
PASS : AutoTest::initTestCase()
PASS : AutoTest::test_case1()
PASS : AutoTest::test_case2()
PASS : AutoTest::cleanupTestCase()
Totals: 4 passed, 0 failed, 0 skipped, 0 blacklisted, 2ms
********* Finished testing of AutoTest *********