這應該是一個相當簡單的問題,但考慮到使用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();
}
有幾件事要檢查。你的'main.cpp'中有什麼?你需要它,還是你可以鏈接'gtest_main'而不是'gtest',從而讓gtest自己計算出可以運行哪些測試?你的頂層'CMakeLists.txt'是否有'調用enable_testing()'的地方? –
我添加了我使用的main.cpp文件。是的,我的頂層CMakeLists.txt具有'enable_testing()'調用。 –