0

プログラムとテストを含むQtプロジェクトの全体的なレイアウトが何であるかを理解していません...

QTest チュートリアルのプロジェクトにはテスト プログラムしかありませんが、私のプロジェクトには既に別のプログラムがあります。QTEST_MAINは実際には別の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

これを適切に機能させる 1 つの方法 (私が 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 に答える