QtTest Unit Testing, как добавить файлы заголовков, расположенные в другом проекте?

Возможно, я что-то пропустил, но мне кажется, что для меня действительно глупо, что единственный учебник, предоставленный для платформы QtTest, тестирует класс QString.

Типичным примером использования для модульного тестирования является... тестирование классов, которые вы написали сами, но нет упоминания о том, как ссылаться на свои классы в другом проекте для тестирования в учебнике, а google тоже меня не устраивает (и Я действительно сомневаюсь, что копирование вставных классов - хороший способ сделать это).

Я даже просмотрел 3 разных Qt-книги без упоминания QtTest.

Ответ 1

Вы можете добавить include paths в другие каталоги проектов в ваш .pro файл следующим образом:

INCLUDEPATH += <directory>

Затем он должен иметь возможность находить заголовки, которые вы включаете.

Изменить: На основе комментария

Это еще одна история. Undefined ссылка обычно означает, что вам не хватает зависимости. Обычно это можно решить с помощью одной из двух вещей.

Простейшим является включение отсутствующего исходного файла:

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

Возможно, лучшее решение состоит в том, чтобы разоблачить повторно используемый код, скомпилировав его как библиотеку и связавшись с ней. Например..DLL или .LIB в Windows и .SO или .A на Linux.

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

Можете ли вы показать нам конкретные ошибки, которые вы получаете?

Ответ 2

Я предлагаю вам поместить все источники и заголовки, которые необходимы как вашему основному проекту приложения, так и вашему проекту unit test в один .pri(.pro include) файл. Поместите этот файл в основной проект. Затем включите этот файл в оба проекта.

Обратите внимание, что всякий раз, добавляя новый класс в основной проект, QtCreator автоматически присоединяет строки SOURCES += и HEADERS += к файлу .pro, но вы хотите, чтобы они были в .pri файле, поэтому вам нужно переместить их потом вручную. Я думаю, что нет решения рассказать QtCreator, куда их поставить.


Основной проект:

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

myproject.pro:

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

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

myproject.pri:

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

Unit test проект:

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)