2015-10-29 33 views
1

這應該是一個相當簡單的問題,但考慮到使用cmake進行項目構建的黑色藝術,它將幫助相當多的人爲此而掙扎。使用Google Test和CMake在子文件夾中配置測試

我想讓我的代碼庫更有條理。爲此,我將根據域創建包含測試套件的子文件夾。

谷歌測試本身已經在編譯和運行,唯一的問題是,通過這次重組,谷歌測試找不到我有的任何測試用例。

這裏是我的結構:

 
tests\ 
    | 
    \domain1\ 
      |CMakeLists.txt 
      |domain1_test.cpp 
      |domain1_test.hpp 
      |[.. more tests ...] 
    \domain2\ 
      |CMakeLists.txt 
      |domain2_test.cpp 
      |domain2_test.hpp 
      |[.. more tests ...] 
    |main.cpp 
    |CMakeLists.txt 

正如你所看到的,我有兩個文件夾,其中測試生活。

這些的CMakeLists.txt文件如下:

 
SET(DOMAIN1_TEST_SRC 
     domain1_test.cpp 
     domain1_test.hpp) 

ADD_LIBRARY(domain1testlib STATIC ${DOMAIN1_TEST_SRC}) 

TARGET_LINK_LIBRARIES(domain1testlib 
     ${Boost_LIBRARIES} 
     domain_lib 
     gtest 
     ) 

TARGET_INCLUDE_DIRECTORIES(domain1testlib 
     INTERFACE 
     ${CMAKE_CURRENT_SOURCE_DIR}) 

在主要測試目錄CMakeLists.txt是:

 

add_subdirectory(domain1) 
add_subdirectory(domain2) 

ADD_EXECUTABLE(my_domain_tests main.cpp) 

TARGET_LINK_LIBRARIES(my_domain_tests 
     ${Boost_LIBRARIES} 
     domain1testlib 
     domain2testlib 
     comptestlib 
     gtest 
     ) 

add_test(MyTestSuite my_domain_tests) 

我在做什麼錯?

運行測試只是說沒有發現測試。

謝謝!

UPDATE 添加我的main.cpp

這真的沒有什麼特別的,只是樣板的main.cpp文件。

#include "gtest/gtest.h" 

int main(int argc, char ** argv) { 

    ::testing::InitGoogleTest(&argc, argv); 

    return RUN_ALL_TESTS(); 
} 
+1

有幾件事要檢查。你的'main.cpp'中有什麼?你需要它,還是你可以鏈接'gtest_main'而不是'gtest',從而讓gtest自己計算出可以運行哪些測試?你的頂層'CMakeLists.txt'是否有'調用enable_testing()'的地方? –

+0

我添加了我使用的main.cpp文件。是的,我的頂層CMakeLists.txt具有'enable_testing()'調用。 –

回答

1

的問題是,沒有從domain*testlib S個符號從您的可執行文件來源引用,即main.cpp

Google Test中的TESTTEST_F宏自動向測試運行器註冊測試用例。因此,您的測試源文件實際上包含gtest庫中符號的引用,而不是其他方式。因此,鏈接器將不包含任何實際的測試用例。

您應該將domain*_test.cppdomain*_test.hpp文件包含爲可執行文件的一部分,而不是使用它們創建庫。您可以直接參考文件或使用每個CMakeLists.txt中定義的變量和源列表。

+0

是的,這解決了這個問題。所以,基本上你必須引用主CMakeLists.txt中的所有內容。我認爲通過使用庫,我可以通過編譯我想測試的東西來節省項目增長時的編譯時間。 –

+0

@HectorVillarreal:好吧,'make'已經負責編譯新的/修改過的源代碼,並且即使你只有一個源文件被編譯,鏈接也必須重新執行。所以如果沒有庫,你不會節省太多的編譯時間,事實上它的速度(只是一點點)會更快,因爲你沒有花時間創建和擴展檔案。 –

-1

我在做什麼錯?

運行測試只是說沒有發現測試。

,使可用於「使測試」,並努力CTEST內建立目錄,你需要

ENABLE_TESTING()# Force "make test" to works 

add_test之前的CMakeLists.txt

+0

問題不是'make test'不能運行測試可執行文件。該OP說他運行測試和可執行報告,沒有測試發現。另外,他不使用'CTest',而是'gtest'。 –

相關問題