在QT测试中使用超类

时间:2019-07-05 13:35:47

标签: qt unit-testing qttest

我正在尝试使用超类来定义通用的构造函数,initTestCase()cleanupTestCase()init()cleanup()代码进行测试。

class BaseTest : public QObject
{
    Q_OBJECT

protected slots:
    void initTestCase();
    void init();
    void cleanup();
    void cleanupTestCase();
}

class Test1 : public BaseTest 
{
protected slots:
    void test1();
    void test2();
}

QTEST_MAIN(Test1)

执行后,将执行超类插槽(initTestCase()cleanupTestCase()),但子类插槽将被忽略。

在这种情况下是否可以执行子类的测试? QT测试应如何组织常见行为?

编辑:使用专用插槽已解决此问题,但似乎有重复(嵌套执行),相对于普通输出在“测试结果”窗格中显示。一些示例代码已发布。

parent.h:

#ifndef PARENT_H
#define PARENT_H

#include <QObject>
#include <QtTest>

class Parent : public QObject
{
    Q_OBJECT
public:

private slots:
    void initTestCase();
    void init();
    void cleanup();
    void cleanupTestCase();
};

#endif // PARENT_H

parent.cpp:

#include "parent.h"

void Parent::initTestCase() {}

void Parent::cleanupTestCase() {}

void Parent::init() {}

void Parent::cleanup() {}

testwithparent.h:

#ifndef TESTWITHPARENT_H
#define TESTWITHPARENT_H

#include <QObject>
#include <QtTest>
#include "parent.h"

class TestWithParent : public Parent
{
    Q_OBJECT
public:

private slots:
    void test1();
};

#endif // TESTWITHPARENT_H

testwithparent.cpp:

#include "testwithparent.h"

void TestWithParent::test1() {
    Q_ASSERT(true);
}

QTEST_MAIN(TestWithParent)

控制台输出:

PASS   : TestWithParent::initTestCase()
PASS   : TestWithParent::test1()
PASS   : TestWithParent::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped, 0 blacklisted

测试结果输出:

Test summary: 6 passes, 0 fails. <-- double test count
Executing test case TestWithParent
    Executing test function initTestCase
    Executing test function test1
    Executing test function cleanupTestCase
    Executing test case TestWithParent <-- repetition

0 个答案:

没有答案