QTEST_APPLESS_MAIN liefert Fehler
Verfasst: 13. Januar 2019 17:18
Hintergrund
Ich schreibe gerade ein Projekt, das ich gerne testen würde. Dafür habe ich folgende Dateistruktur entworfen:
Routenplaner
├───app
├───build
└───TestRoutenplaner
app und TestRoutenplaner sind Teilprojekte des Projektes Routenplaner.
Innerhalb des Testes baue ich mir aus bereitgestellten Daten Kommandozeilenaufrufe zusammen, die ich dann mit system() ausführe und anschließend analysiere. Kompiliert alles ganz wunderbar. Ich habe u. a. QtTest und QtTest/QtTest eingebunden sowie in der Klassendeklaration von Q_Object abgeleitet, Q_OBJECT in der ersten Zeile benannt, die Funktionen als private slots deklariert und an den relevanten Stellen nur QStrings verwendet.
Ich nutze QTEST_APPLESS_MAIN. Allerdings funktioniert QTEST_MAIN ebensowenig.
Das Programm ist auf dem aktuellen Stand.
Ich habe schon alles bereinigt, qmake ausgeführt und neu erstellt -- keine Änderung.
Die häufigsten Fehlerursachen dürften damit schon ausgeschlossen sein.
Das Problem
Wenn ich QTEST_APPLESS_MAIN in meinem Test entkommentiere, erhalte ich folgende Fehlermeldung (Ausschnitt aus der Logging-Datei):
Der Compiler beschwert sich also über diese Stelle hier in qtest.h:
Was läuft da schief?
Das Projekt ist relativ groß, deswegen habe ich nur Ausschnitte gepostet. Bei Interesse kann ich das Projekt auf Github o. ä. hochladen. Ein Minimalbeispiel zu kompilieren ist mir nicht gelungen.
Das Problem tritt mit Windows ebenso wie mit Linux auf.
Ich schreibe gerade ein Projekt, das ich gerne testen würde. Dafür habe ich folgende Dateistruktur entworfen:
Routenplaner
├───app
├───build
└───TestRoutenplaner
app und TestRoutenplaner sind Teilprojekte des Projektes Routenplaner.
Innerhalb des Testes baue ich mir aus bereitgestellten Daten Kommandozeilenaufrufe zusammen, die ich dann mit system() ausführe und anschließend analysiere. Kompiliert alles ganz wunderbar. Ich habe u. a. QtTest und QtTest/QtTest eingebunden sowie in der Klassendeklaration von Q_Object abgeleitet, Q_OBJECT in der ersten Zeile benannt, die Funktionen als private slots deklariert und an den relevanten Stellen nur QStrings verwendet.
Ich nutze QTEST_APPLESS_MAIN. Allerdings funktioniert QTEST_MAIN ebensowenig.
Das Programm ist auf dem aktuellen Stand.
Ich habe schon alles bereinigt, qmake ausgeführt und neu erstellt -- keine Änderung.
Die häufigsten Fehlerursachen dürften damit schon ausgeschlossen sein.
Das Problem
Wenn ich QTEST_APPLESS_MAIN in meinem Test entkommentiere, erhalte ich folgende Fehlermeldung (Ausschnitt aus der Logging-Datei):
Code: Alles auswählen
In file included from C:/Qt/5.12.0/mingw73_64/include/QtTest/QtTest:11:0,
from ../TestRoutenplaner/TestRoutenplaner.cpp:1:
../TestRoutenplaner/TestRoutenplaner.cpp: In function 'int main(int, char**)':
C:/Qt/5.12.0/mingw73_64/include/QtTest/qtest.h:365:16: error: expected ';' before 'tc'
TestObject tc; \
^
../TestRoutenplaner/TestRoutenplaner.cpp:132:1: note: in expansion of macro 'QTEST_APPLESS_MAIN'
QTEST_APPLESS_MAIN("RoutenplanerTest")
^
C:/Qt/5.12.0/mingw73_64/include/QtTest/qtest.h:365:18: warning: statement has no effect [-Wunused-value]
TestObject tc; \
^
../TestRoutenplaner/TestRoutenplaner.cpp:132:1: note: in expansion of macro 'QTEST_APPLESS_MAIN'
QTEST_APPLESS_MAIN("RoutenplanerTest")
^
C:/Qt/5.12.0/mingw73_64/include/QtTest/qtest.h:367:26: error: 'tc' was not declared in this scope
return QTest::qExec(&tc, argc, argv); \
^
../TestRoutenplaner/TestRoutenplaner.cpp:132:1: note: in expansion of macro 'QTEST_APPLESS_MAIN'
QTEST_APPLESS_MAIN("RoutenplanerTest")
^
C:/Qt/5.12.0/mingw73_64/include/QtTest/qtest.h:367:26: note: suggested alternative: 'tm'
return QTest::qExec(&tc, argc, argv); \
^
../TestRoutenplaner/TestRoutenplaner.cpp:132:1: note: in expansion of macro 'QTEST_APPLESS_MAIN'
QTEST_APPLESS_MAIN("RoutenplanerTest")
^
mingw32-make[1]: *** [Makefile.Debug:1879: debug/TestRoutenplaner.o] Error 1
Code: Alles auswählen
#ifdef QT_TESTCASE_BUILDDIR
# define QTEST_SET_MAIN_SOURCE_PATH QTest::setMainSourcePath(__FILE__, QT_TESTCASE_BUILDDIR);
#else
# define QTEST_SET_MAIN_SOURCE_PATH QTest::setMainSourcePath(__FILE__);
#endif
#define QTEST_APPLESS_MAIN(TestObject) \
int main(int argc, char *argv[]) \
{ \
TestObject tc; \ /* <-- hier erwartet der Compiler ein Komma vor TestObject */
QTEST_SET_MAIN_SOURCE_PATH \
return QTest::qExec(&tc, argc, argv); \
}
Das Projekt ist relativ groß, deswegen habe ich nur Ausschnitte gepostet. Bei Interesse kann ich das Projekt auf Github o. ä. hochladen. Ein Minimalbeispiel zu kompilieren ist mir nicht gelungen.
Das Problem tritt mit Windows ebenso wie mit Linux auf.