我正在Qt Creator中製作一個單元測試Qt項目,該項目引用了我想測試的項目中的文件。現在,無論我是通過.pri文件引用類還是通過將相關文件直接添加到單元測試項目的SOURCES和HEADERS變量(和.pri文件看起來確實也是如此,它只包含SOURCES和HEADERS條目),添加主項目中的文件似乎覆蓋了單元測試項目中的main.cpp。Qt - 涉及項目的main()函數,覆蓋實際項目的main()
我的意思是,當我構建並運行uni測試可執行文件時,原始項目的main()
函數將運行!如果我重命名原始項目中的main.cpp或單元測試項目(它更改了.pro文件)中的main.cpp,那麼事情就會順利進行。好吧,我可以接受這樣的解決方案,但它有點不舒服,因爲將來有一天我可能會意外地在這兩個項目中的某些文件中使用相同的名稱,並且誰知道,也許會得到錯誤,這將是追查的噩夢。除了我只是好奇這種行爲的原因是什麼。
當然.pri文件只包含類頭文件和cpp文件,而不是原始應用程序的main.cpp文件,例如,在我的情況下:
HEADERS += \
../Project/fooclass.h
SOURCES += \
../Project/fooclass.cpp
也兩個項目在彼此相鄰,不嵌套目錄。
編輯:Frank Osterfeld要求看我的測試的親文件,所以這裏是:
測試的親文件:
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); \
}
參觀此page對於什麼是描述AutoTest.h的確如此。簡而言之,它使運行多個單元測試與Qt框架少一點麻煩。
編輯: 親。主體工程(即包含我想測試類之一)的文件是:
QT += core
QT -= gui
TARGET = Project
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp \
fooclass.cpp
HEADERS += \
fooclass.h
它位於路徑:... \ Unit_Test \項目 儘管單元測試項目位於路徑上。 .. \ Unit_Test \ Tests 現在事情正常工作,因爲定義main()
的文件在兩個項目中都不相同。只要我重命名它們以使它們相同,單元測試項目就會執行原始項目的主要功能。
請問您能否同時顯示.pro和.pri。如果兩個項目都在不相關的目錄中,並且不包含基本應用程序的'main()',那麼我很難看到這是如何實現的。 – Koying 2012-03-20 09:58:44
@Koying - 按要求完成 – Puchatek 2012-03-22 02:09:45
我無法看出這種情況會怎樣發生......如果您希望我看得更遠,請提供一個.tar/.zip文件給您完整的源代碼。 – Koying 2012-03-22 09:45:10