Итак, я пытаюсь научиться тестированию CppUnit. Так как CppUnit нуждается в своем собственном main
Функция запуска тестов позволила мне переместить мой набор тестов в собственный подпроект. Если вся эта философия неверна, пожалуйста, поправьте меня. Затем я перенесу это на свой Git-сервер и попытаюсь запустить тесты в Jenkins по триггеру Gerrit. В конечном счете, я пытаюсь выучить Дженкинса и создаю простой проект, который поможет мне в этом. Тем не менее, когда я компилирую, я получаю много проблем, связанных с файлами в JenkinsTestSuite
не в состоянии найти файлы в JenkinsTestMain
, Например…
persontest.cpp:5:20: error: person.h: No such file or directory
In file included from persontest.cpp:7:
Моя (базовая) структура каталогов как таковая …
JenkinsTest
| -JenkinsTestMain
| -JenkinsTestSuite
Мой файл JenkinsTest.pro выглядит так:
TEMPLATE = subdirs
SUBDIRS += \
JenkinsTestSuite \
JenkinsTestMain
CONFIG += ordered
SUBDIRS += JenkinsTestMain
Мой файл JenkinsTestMain.pro выглядит так:
!include(../common.pri) {
error(Couldn't find the common.pri file!)
}
QT += core
QT -= gui
TARGET = JenkinsTest
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp \
person.cpp
HEADERS += \
person.h
Мой файл JenkinsTestSuite.pro выглядит так:
!include(../common.pri) {
error(Couldn't find the common.pri file!)
}
QT += core
QT -= gui
TARGET = JenkinsTest
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp \
persontest.cpp \
HEADERS += \
persontest.h
Мой файл common.pri выглядит так:
INCLUDEPATH += . ..
WARNINGS += -Wall
TEMPLATE = lib
UI_DIR = .uics
MOC_DIR = .mocs
OBJECTS_DIR = .objs
JenkinsTestMain / не входит в INCLUDEPATH, поэтому person.h не найден.
В JenkinsTestSuite.pro необходимо добавить
INCLUDEPATH += ../JenkinsTestMain
В качестве альтернативы используйте #include в тесте.
Я также предлагаю добавить DEPENDPATH + = для каждого INCLUDEPATH + =, в противном случае изменения в person.h не приведут к перекомпиляции persontest.cpp, что приведет к неправильному поведению и сбоям.
Другая проблема заключается в том, что person.cpp не является частью JenkinsTest. Вы должны либо скомпилировать person.cpp в другой раз для JenkinsTest, либо поместить этот код в общую библиотеку.
Вероятно, это не относится к ОП, но у меня была та же проблема по другой причине.
Если ваш проект прекрасно компилируется сам по себе, но завершается неудачно при сборке в качестве подпроекта, это может быть связано с тем, что его использует другой проект и что-то отсутствует в папке include. Например: если Проект A использует Проект B, а Проект B зависит от файла X, вы можете получить ошибки, говорящие о том, что Проект B не может найти файл X, поскольку у Проекта A его нет в пути включения. (Даже при том, что Проект B включает это просто отлично)
Добавление зависимостей к пути включения в проекте A в qmake устранило проблему для меня.