簡體   English   中英

構建項目時如何讓 BOOST 單元測試運行

[英]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 關於在構建期間可以使用單元測試庫的不同使用變體的大量文檔

  • 在 CMake 配置期間使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM