add_test

新增一個測試到專案中,並由 ctest(1) 執行。

add_test(NAME <name> COMMAND <command> [<arg>...]
         [CONFIGURATIONS <config>...]
         [WORKING_DIRECTORY <dir>]
         [COMMAND_EXPAND_LISTS])

新增一個名為 <name> 的測試。測試名稱可以包含任意字元,如果需要,可以使用 引號引數方括號引數 表示。請參閱政策 CMP0110

只有在調用 enable_testing() 命令後,CMake 才會產生測試。CTest 模組會自動調用 enable_testing,除非 BUILD_TESTING 設定為 OFF

使用 add_test(NAME) 簽章新增的測試支援在由 set_property(TEST)set_tests_properties() 設定的測試屬性中使用 產生器表達式。測試屬性只能在建立測試的目錄中設定。

add_test 選項包括

COMMAND

指定測試命令列。

如果 <command> 指定由 add_executable() 建立的可執行目標

  • 它將自動被建置時期建立的可執行檔的位置取代。

  • 在 3.3 版本中新增: 目標的 CROSSCOMPILING_EMULATOR (如果已設定) 將用於在主機上執行命令

    <emulator> <command>
    

    在 3.29 版本中變更: 模擬器僅在 cross-compiling (交叉編譯) 時使用。請參閱政策 CMP0158

  • 在 3.29 版本中新增: 目標的 TEST_LAUNCHER (如果已設定) 將用於啟動命令

    <launcher> <command>
    

    如果也設定了 CROSSCOMPILING_EMULATOR,則兩者都會使用

    <launcher> <emulator> <command>
    

可以使用 產生器表達式 指定命令。

CONFIGURATIONS

限制測試僅在指定的組態中執行。

WORKING_DIRECTORY

設定執行測試的工作目錄,即測試屬性 WORKING_DIRECTORY。如果未指定,測試將在 CMAKE_CURRENT_BINARY_DIR 中執行。可以使用 產生器表達式 指定工作目錄。

COMMAND_EXPAND_LISTS

在 3.16 版本中新增。

COMMAND 引數中的列表將會展開,包括使用 產生器表達式 建立的列表。

如果測試命令以代碼 0 退出,則測試通過。非零退出代碼表示「失敗」的測試。測試屬性 WILL_FAIL 反轉了此邏輯。請注意,即使 WILL_FAIL 為 true,系統級別的測試失敗 (例如區段錯誤或堆積錯誤) 仍然會導致測試失敗。寫入 stdout 或 stderr 的輸出會被 ctest(1) 捕獲,並且僅透過 PASS_REGULAR_EXPRESSIONFAIL_REGULAR_EXPRESSIONSKIP_REGULAR_EXPRESSION 測試屬性影響通過/失敗狀態。

在 3.16 版本中新增: 新增 SKIP_REGULAR_EXPRESSION 屬性。

範例用法

add_test(NAME mytest
         COMMAND testDriver --config $<CONFIG>
                            --exe $<TARGET_FILE:myexe>)

這會建立一個名為 mytest 的測試,其命令會執行 testDriver 工具,並傳遞組態名稱和目標 myexe 產生的可執行檔的完整路徑。


建議使用上面的命令語法,而不是較舊、較不靈活的形式

add_test(<name> <command> [<arg>...])

新增一個名為 <name> 的測試,並帶有給定的命令列。

與上面的 NAME 簽章不同,命令列中不支援目標名稱。此外,使用此簽章新增的測試不支援命令列或測試屬性中的 產生器表達式