2012-01-03 101 views
2

我有一個小而不平凡的項目,由於架構原因,它被構建爲三個獨立項目,它們是相互依賴的,所以除非我特別關注或者改進測試覆蓋率發現了一個漏洞,對我來說,從項目根源開始工作是有道理的。使用CTest運行嵌套測試

佈局是這樣的:

/CMakeLists.txt 
/build/ 
/src/command-line-application/ 
/src/command-line-application/CMakeLists.txt 
/src/command-line-application/build/ 
/src/command-line-application/src/ 
/src/command-line-application/tests/ 
/src/command-line-application/include/ 
/src/vlc-plugin/ 
/src/vlc-plugin/src/ 
/src/libmyproject/ 
/src/libmyproject/CMakeLists.txt 
/src/libmyproject/build/ 
/src/libmyproject/src/ 
/src/libmyproject/tests/ 
/src/libmyproject/include/ 
/src/libmyotherproject/ 
/src/libmyotherproject/CMakeLists.txt 
/src/libmyotherproject/build/ 
/src/libmyotherproject/src/ 
/src/libmyotherproject/tests/ 
/src/libmyotherproject/include/ 

在結構中的一個字,libmyproject是我的應用程序的真正的肉,它是建立這種方式,因爲一個CLI是出貨代碼給最終用戶一個可怕的方式作爲一個庫,它也用於C#和Objective-C應用程序。 (以及所有按預期工作)

libmyotherproject是一些平臺特定的支持代碼,不直接連接到libmyproject,它有幾個單元測試。

vlc-plugin在這裏並不重要,除非表明並非所有/src/*/都有單元測試。

我的工作流通常是在CLI應用上破解,直到有用的東西出現,然後將其重構到庫中,並確保它是可移植的。

當我在/src/*/build/工作,通常運行cmake ../ && make && ctest --output-on-failure,一切正常。

當我/build我工作,並運行cmake,各個組件構建正確(使用add_subdirectories())從CMake的,但CTest不遞歸找到測試。

CTest的文檔是你應該做的一點點無助:

USAGE 
     ctest [options] 

DESCRIPTION 
     The "ctest" executable is the CMake test driver program. CMake-generated build trees created for 
     projects that use the ENABLE_TESTING and ADD_TEST commands have testing support. This program will 
     run the tests and report results. 

我早就預料的,因爲ADD_TEST()呼叫住在/src/libmyotherproject/tests/CMakeLists.txt,他們將運行? (他們至少編譯當我運行cmake/build/

我希望我已經能夠提供足夠的信息,謝謝。

+0

你在最外面的CMakeLists.txt中有'enable_testing()'調用嗎? – sakra 2012-01-03 18:45:39

+0

'enable_testing()'位於'/ src/libmyproject/CMakeLists.txt'中,另外還有一個add_subdirectory('tests')',它正確地(在'/ src/libmyproject/build'中)編譯,用'ctest')運行測試。將'enable_testing()'添加到頂部'CMakeLists.txt'不會改變任何內容。 '/ src/libmyproject/tests /'中的'CMakeLists.txt'包含'add_test()'調用本身。 – 2012-01-03 22:32:11

+0

也許你在所有的add_subdirectory()調用之後調用了enable_testing()?它應該在add_subdirectory調用之前執行。儘管如此,在我的回答中,首選「include(CTest)」,它會爲您調用enable_testing()。 – DLRdave 2012-11-08 15:13:42

回答

3

include(CTest) 

在頂層的CMakeLists.txt文件做任何add_subdirectory調用之前。

這將爲您調用enable_testing,並且如果您想要在項目上運行ctest儀表板腳本以將結果發送到CDash服務器,也會進行設置。