Qt单元测试(QtTest)

组织项目工程和单元测试工程:

1. 创建一个项目工程,并添加一个类,实现一个getMax函数。
2. 创建一个单元测试工程,包含所有的测试代码和头文件。
3. 在单元测试工程中添加项目工程的源代码和头文件,以便能够访问需要测试的类和函数。
4. 在单元测试工程中添加QtTest库,以便能够使用Qt单元测试框架。

对项目工程的某个类进行单元测试:

1. 在单元测试工程中创建一个测试类,继承自QObject和QTest类。
2. 在测试类中添加测试函数,测试函数的名称应该以test开头。
3. 在测试函数中创建需要测试的类的对象,并调用需要测试的函数。
4. 使用QtTest库中的断言函数来验证函数的输出是否符合预期。

在项目工程MyProject中添加类MyClass,并实现getMax函数

#ifndef MYCLASS_H
#define MYCLASS_H

#include <QObject>
#include <QVariant>

class MyClass : public QObject
{
    Q_OBJECT
public:
    explicit MyClass(QObject *parent = nullptr);

public:
    QVariant getMax(QVariant var1, QVariant var2)
    {
        return var1>var2?var1:var2;
    }

signals:

public slots:
};

#endif // MYCLASS_H

在单元测试工程MyProjectTest的pro文件中添加项目工程中的myclass.h和myclass.cpp文件,并在tst_myclasstest.cpp中包含头文件myclass.h,然后开始完成测试用例的编写。

#include <QtTest>

// add necessary includes here
#include "myclass.h"

class MyClassTest : public QObject
{
    Q_OBJECT

public:
    MyClassTest();
    ~MyClassTest();

private slots:
    void test_getMax(); //QVERIFY,QCOMPARE
    void test_localeAwareCompare();//QCOMPARE,QBENCHMARK

    //数据驱动测试
    void getMax_data();
    void getMax();
};

MyClassTest::MyClassTest()
{

}

MyClassTest::~MyClassTest()
{

}

void MyClassTest::test_getMax()
{
    MyClass obj;

    QVERIFY(obj.getMax(1, 2)==2);
    QVERIFY(obj.getMax(-1, 1)==1);

    QCOMPARE(obj.getMax(1, 2), 2);
    QCOMPARE(obj.getMax(-1, 1), 1);

}

void MyClassTest::test_localeAwareCompare()
{
    QString str1 = QLatin1String("This is a test string");
    QString str2 = QLatin1String("This is a test string");

    QCOMPARE(str1.localeAwareCompare(str2), 0);

    QBENCHMARK {
        str1.localeAwareCompare(str2);
    }
}

void MyClassTest::getMax_data()
{
    QTest::addColumn<QVariant>("var1");
    QTest::addColumn<QVariant>("var2");
    QTest::addColumn<QVariant>("result");

    QTest::newRow("var1>var2") << QVariant(129)   << QVariant(128) <<QVariant(129);
    QTest::newRow("var2>var1")  << QVariant(125)  << QVariant(130) <<QVariant(130);
    QTest::newRow("var1==var2") << QVariant(128)   << QVariant(128) <<QVariant(128);
}

void MyClassTest::getMax()
{
    MyClass obj;
    QFETCH(QVariant, var1);
    QFETCH(QVariant, var2);
    QFETCH(QVariant, result);

    QCOMPARE(obj.getMax(var1,var2), result);
}



QTEST_APPLESS_MAIN(MyClassTest)

#include "tst_myclasstest.moc"

测试结果如下:

********* Start testing of MyClassTest *********
Config: Using QtTest library 5.12.0, Qt 5.12.0 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 5.3.1 20160406 (Red Hat 5.3.1-6))
PASS   : MyClassTest::initTestCase()
PASS   : MyClassTest::test_getMax()
PASS   : MyClassTest::test_localeAwareCompare()
RESULT : MyClassTest::test_localeAwareCompare():
     0.000031 msecs per iteration (total: 67, iterations: 2097152)
PASS   : MyClassTest::getMax(var1>var2)
PASS   : MyClassTest::getMax(var2>var1)
PASS   : MyClassTest::getMax(var1==var2)
PASS   : MyClassTest::cleanupTestCase()
Totals: 7 passed, 0 failed, 0 skipped, 0 blacklisted, 292ms
********* Finished testing of MyClassTest *********

完整工程链接:

基于QtTest的Qt单元测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zw_ggr_2017

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值