0

我只是不明白带有程序和测试的Qt项目的整体布局是什么......

QTest教程的项目只有测试程序,但我的项目已经有另一个程序。如果我添加测试用例,它声称“main() 的多个定义”,因为QTEST_MAIN实际上是另一个main()

另外,我的测试课上出现“未定义的 vtable 引用”,不知道为什么..

我正在使用 Qt 5.2.1

这是我的项目文件:

#-------------------------------------------------
#
# Project created by QtCreator 2014-06-06T13:42:19
#
#-------------------------------------------------

QT       += core gui testlib
CONFIG += testcase

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = GutMiner
TEMPLATE = app
LIBS += -lquazip


SOURCES += main.cpp\
        mainwindow.cpp \
    dataform.cpp \
    datavec.cpp \
    distance.cpp \
    linereader.cpp \
    diseasepackage.cpp \
    error.cpp \
    newpagedialog.cpp \
    resultpage.cpp \
    test.cpp

HEADERS  += mainwindow.h \
    dataform.h \
    distance.h \
    datavec.h \
    linereader.h \
    diseasepackage.h \
    error.h \
    newpagedialog.h \
    resultpage.h

FORMS    += mainwindow.ui \
    dataform.ui \
    newpagedialog.ui

这是我的测试源文件:

#include <QObject>
#include <QTest>

#include "distance.h"
#include "diseasepackage.h"

class TestDistance: public QObject
{
    Q_OBJECT
public:
    virtual ~TestDistance();
private slots:
    void jensen_shannon();
};

TestDistance::~TestDistance() {}

void TestDistance::jensen_shannon()
{
    DiseasePackage pkg("CRC.zip");
}

QTEST_MAIN(TestDistance);
4

1 回答 1

2

使这项工作正常工作的一种方法(我在 Qt 4.8 中使用的方法)是为测试程序创建一个单独的 .pro 文件。

主程序的 .pro 文件不包含测试代码。

QT       += core gui qt3support xml script

TARGET = simui
TEMPLATE = app

SOURCES += main.cpp\
    <lots of other source files

HEADERS  += \
    < header files>

FORMS    += \
    < form files > 

测试程序的 .pro 文件不包括 main.cpp。测试程序的 .pro 文件确实包含测试库:

QT      += core gui qt3support xml script
CONFIG  += qtestlib

TARGET = testsimui
TEMPLATE = app

SOURCES += \
    < all the sources form the main program (except main.cpp!) > 
    < all the test code sources. >

HEADERS += \
    < all the headers from the main program >
    < all the test code headers> 

FORMS    += \
    < all the forms from the main program > 

这不一定是最好的设置,但它确实工作得很好,尽管您最终不得不将每个源文件添加到两个 .pro 文件中。

至于您的 vtable 问题,我认为您所提供的信息不足以从中做出任何事情。哪个班级有问题?另外,我很好奇为什么你的测试类中有一个空的析构函数。

于 2014-06-13T12:44:35.580 回答