[英]How to make BOOST unit tests run when building a project
我正在研究一個按如下方式組織到庫中的 C++ 項目:
├── Lib_1
│ ├── ...
│ └── CMakeLists.txt
├── Lib_2
│ ├── ...
│ └── CMakeLists.txt
│ ...
├── Lib_N
│ ├── ...
│ └── CMakeLists.txt
├── Main.cpp
└── CMakeLists.txt
在文件夾結構之外具有主要可執行文件。 主要的 CMakeLists 有以下內容:
cmake_minimum_required(VERSION 3.10)
project(MyConsoleApp VERSION 1.0)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
add_subdirectory(Lib_1)
add_subdirectory(Lib_2)
...
add_subdirectory(Lib_N)
add_executable(${PROJECT_NAME} Main.cpp)
target_link_libraries(${PROJECT_NAME}
Lib_1
Lib_2
...
Lib_N
)
和子文件夾中的 CMakeLists:
set(Lib_k_Src # k = 1,2,...,N
src1.h
src1.cpp
...
)
add_library(Lib_k ${Lib_k_Src})
我想為每個庫組件附加一個 BOOST(或任何其他)單元測試套件,並確保它在每次構建組件時運行。 或者,或者,生成帶有測試套件的可執行文件,這些測試套件可以與主執行程序分開運行。
到目前為止,我所有的嘗試都未能將 Boost 和 CppUnit 與主可執行文件集成,導致在附加第三方單元測試庫時出現 linker 錯誤(通常是 LNK1104)。 我為 boost include 和 lib 目錄創建了 Windows 環境變量,並嘗試了一些可用的示例 CMake ,但這些甚至不會在 CMakeGUI 中配置。 我唯一的運氣是在單獨的解決方案中使用 CppUnit,沒有 CMake 生成的包裝器,在運行時通過 Main.cpp 使用 CppTestRunner。
關於如何解決這個問題的任何想法?
我花了幾天時間試圖解決這個問題,甚至考慮實現我自己的斷言宏進行測試,以便可以在運行時從 main 調用它們。
我的 Boost 設置可以在這里找到。 目前,我已經為 Symplekt_GeometryBase 生成了一個測試庫 Symplekt_GeometryBase_Tests 作為原型。 感謝您提供任何有用的見解。
你錯過了很多東西。 請務必重新閱讀 Boost 關於在構建期間可以使用單元測試庫的不同使用變體的大量文檔。
find_package(Boost REQUIRED)
查找 Boost 。 根據您是使用 header 唯一版本還是庫版本,在后一種情況下,您需要添加unit_test_framework
作為 find 調用所需的組件。 您可能想在頂級CMakeLists.txt
中執行此操作。 如果這無法自動找到 Boost,請嘗試將Boost_ROOT
環境變量設置為您機器上 Boost 的安裝目錄,或者在 StackOverflow 上查看眾多其他答案,以使用 CMake 查找 Boost。 (提示:如果這沒有明顯的原因一直失敗,您可能沒有正確構建/安裝 Boost)。target_link_libraries(mytest PUBLIC Boost::boost)
讓您的測試可執行目標將 Boost 作為依賴項引入。 同樣,如果您不使用僅標頭設置,您還需要以相同的方式鏈接到Boost::unit_test_framework
。 擺脫您當前使用的所有${BOOST_WHATEVER}
變量,您將不需要任何這些。enable_testing
。 理想情況下,這應該在包含任何測試之前在根CMakeLists
中完成一次。add_test
將測試目標注冊到 CMake 的測試機制中。 看來你已經在這樣做了。 您的單元測試現在將在 CMake 的測試運行程序中注冊,並且可以通過構建相應的 CMake 元目標(如RUN_TESTS
)或通過ctest來執行。
通過添加調用測試運行器的自定義構建步驟,您可以在構建期間自動執行測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.