Я делаю проект Qt модульных тестов в Qt Creator, который ссылается на файлы из проекта, который я хочу протестировать. Теперь, ссылаюсь ли я на классы, которые я хочу протестировать через файл .pri или добавляя соответствующие файлы непосредственно в переменные SOURCES и HEADERS проекта модульных тестов (а файл .pri, похоже, действительно делает то же самое, он просто содержит SOURCES и Записи заголовков), добавление файлов из основного проекта, по-видимому, перезаписывает файл main.cpp в проекте модульных тестов.
Я имею в виду, что когда я собираю и запускаю исполняемый файл uni tests, запускается функция main()
исходного проекта! Если я переименую либо main.cpp в исходном проекте, либо main.cpp в проекте модульных тестов (который изменяет его .pro-файл), то все идет гладко. Ну, я могу жить с таким решением, но оно немного неудобно, потому что однажды в будущем я могу случайно использовать одни и те же имена для некоторых файлов в этих двух проектах, и кто знает, может быть, получит ошибки, которые станут кошмаром для отслеживания , Кроме того, мне просто любопытно, что является причиной такого поведения.
Конечно, файл .pri включает только заголовки классов и файлы cpp, а не main.cpp исходного приложения, например в моем случае:
HEADERS += \
../Project/fooclass.h
SOURCES += \
../Project/fooclass.cpp
Также оба проекта находятся в каталогах рядом друг с другом, а не во вложенных.
Редактировать: Фрэнк Остерфельд попросил посмотреть про файл моего теста, вот он:
Про файл теста:
QT += core
QT -= gui
QT += testlib
TARGET = Tests
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += \
test_class.cpp \
main_unit_tests.cpp
HEADERS += \
AutoTest.h \
test_class.h \
include(trial.pri)
Trial.pri содержит файлы из основного проекта, который я хочу протестировать. main_unit_tests.cpp (переименован из оригинального main.cpp как специальное решение) содержит:
#include <QtCore/QCoreApplication>
#include "AutoTest.h"
TEST_MAIN
TEST_MAIN
определяется в AutoTest.h как
#define TEST_MAIN \
int main(int argc, char *argv[]) \
{ \
return AutoTest::run(argc, argv); \
}
Посетите эту страницу для описания того, что делает AutoTest.h. Короче говоря, это немного облегчает запуск нескольких модульных тестов с каркасом Qt.
Edit:
профи. Файл основного проекта (то есть, который содержит классы, которые я хочу протестировать):
QT += core
QT -= gui
TARGET = Project
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp \
fooclass.cpp
HEADERS += \
fooclass.h
И он лежит по пути: ... \ Unit_Test \ Project
Принимая во внимание, что проект модульных тестов лежит по пути: ... \ Unit_Test \ Tests
Сейчас все работает хорошо, так как файлы, определяющие main()
, различны в обоих проектах. Как только я переименую их, чтобы они были одинаковыми, проекты модульных тестов оправдывают основную функцию исходного проекта.