Qt单元测试框架快速上手

本文介绍Qt的单元测试框架是什么,有什么用和怎么快速使用它。

1.是什么?

  Qt单元测试框架除了提供单元测试框架的基本功能外还提供了针对GUI测试的扩展功能。一般单元测试意义上是指对软件中的最小可测试单元进行检查验证,其中最小测试单元可以为某个功能点,某个类,某个函数,甚至是某个行为等等。

2.有什么用?

  • 加快开发效率;
  • 提高程序质量。

3.怎么使用?(图解)

  1. 选择其他项目->Auto Test Project
    Qt单元测试框架快速上手_第1张图片

  2. 输入项目名与选择项目目录。
    Qt单元测试框架快速上手_第2张图片

3.选择一个单元测试的类名(这里是AutoTest)

  • Requires QApplication选项为程序添加QApplication类;
  • Generate initialization and cleanup code选项为添加初始化与清除代码(函数)。
    Qt单元测试框架快速上手_第3张图片

4.选择编译环境。
Qt单元测试框架快速上手_第4张图片

5.最后创建完成。 Qt单元测试框架快速上手_第5张图片

6.项目目录
Qt单元测试框架快速上手_第6张图片

4.使用技巧

  以AutoTest测试类为例(文末源码),自动执行带有private slots标记的函数,并会顺序执行。

  • initTestCase是默认第一执行函数(系统自带),用于初始化一些数据和行为;
  • cleanupTestCase是默认最后执行函数(系统自带),用于清理资源和重置状态的操作。
private slots:
    void initTestCase(); /* 可选 */
    void test_case1();
    void test_case2();
    void cleanupTestCase(); /* 可选 */

  测试工具(测试验证函数)

  • 验证被测试函数的结果,需要使用QTest提供的测试函数。
验证函数 用途
QVERIFY(bool) 验证参数是否为真
QCOMPARE(actual, expected) 验证实际参数是否跟期望值一致
  • 示例
void AutoTest::test_case1()
{
    QString name("AutoTest");
    bool isEnable = true;
    QVERIFY(isEnable);
    QCOMPARE(name, QString("AutoTest"));
}

5.附录

  • AutoTest.pro
QT += testlib
QT -= gui

CONFIG += qt console warn_on depend_includepath testcase
CONFIG -= app_bundle

TEMPLATE = app

SOURCES +=  tst_autotest.cpp
  • tst_autotest.cpp
#include 

// 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)

#include "tst_autotest.moc"
  • 输出信息
Config: 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 *********

  • 文章首发于微信公众号:Qt君

你可能感兴趣的:(Qt)