Frage QtTest Unit Testing, wie fügt man Header-Dateien in einem anderen Projekt hinzu?


Vielleicht verpasse ich etwas, aber es scheint mir wirklich dumm zu sein, dass das einzige Tutorial, das für QtTest-Framework bereitgestellt wird, das Testen der QString-Klasse ist.

Der typische Anwendungsfall für Komponententests ist ... das Testen von Klassen, die Sie selbst geschrieben haben, aber es wird nicht erwähnt, wie Sie Ihre Klassen in einem anderen Projekt zum Testen im Lernprogramm referenzieren und Google hat mich ebenfalls im Stich gelassen (und ich bezweifle wirklich Kopieren von Klassen einfügen ist eine gute Möglichkeit, es zu tun).

Ich blätterte sogar 3 verschiedene Qt-Bücher durch, ohne QtTest zu erwähnen.


10
2017-08-03 22:17


Ursprung


Antworten:


Sie können Include-Pfade zu anderen Projektverzeichnissen in Ihrer .pro-Datei hinzufügen:

INCLUDEPATH += <directory>

Dann sollte es in der Lage sein, die Header zu finden, die Sie einschließen.

Bearbeiten: Basierend auf Kommentar

Das ist eine ganz andere Geschichte. Eine nicht definierte Referenz bedeutet normalerweise, dass eine Abhängigkeit fehlt. Dies kann normalerweise mit einem von zwei Dingen gelöst werden.

Am einfachsten ist es, die fehlende Quelldatei einzufügen:

INCLUDEPATH += ../myotherproject/
SOURCES = main.cpp ../myotherproject/missingsource.cpp

Vielleicht ist es die bessere Lösung, wiederverwendbaren Code verfügbar zu machen, indem Sie ihn als Bibliothek kompilieren und mit ihm verknüpfen. Z.B. a .DLL oder .LIB unter Windows und .SO oder .A unter Linux.

INCLUDEPATH += ../myotherproject/
win32:LIBS += ../myotherproject/linkme.lib

Können Sie uns die spezifischen Fehler zeigen, die Sie bekommen?


7
2017-08-03 23:24



Ich schlage vor, dass Sie alle Quellen und Header, die sowohl Ihr Hauptanwendungsprojekt als auch Ihr Komponententestprojekt benötigen, in eine .pri (.pro include) -Datei stellen. Legen Sie diese Datei in das Hauptprojekt. Fügen Sie diese Datei dann in beide Projekte ein.

Beachten Sie, dass QtCreator beim Hinzufügen einer neuen Klasse zum Hauptprojekt automatisch die Datei anfügt SOURCES += und HEADERS += Zeilen in die .pro-Datei einfügen, aber Sie möchten, dass sie in der .pri-Datei enthalten sind. Sie müssen sie anschließend manuell verschieben. Ich denke, dass es keine Lösung gibt, um QtCreator zu sagen, wo man sie hinstellen soll.


Hauptprojekt:

myproject.pro
myproject.pri
main.cpp
someclass.h
someclass.cpp

meinprojekt.pro:

QT += ...
TARGET = ...
...

SOURCES += main.cpp       # "private" to this project
include(myproject.pri)    # needed in unit test

meinProjekt.pri:

SOURCES += someclass.cpp
HEADERS += someclass.h

Unit Test Projekt:

unittest.pro
main.cpp
test.h
test.cpp

unittest.pro:

QT += ...
TARGET = ...
...

SOURCES += main.cpp test.cpp
HEADERS += test.h

# include the classes from the main project:
INCLUDEPATH += ../myproject/
include(../myproject/myproject.pri)

8
2017-08-12 03:58