add_test

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

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

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

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

使用 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 簽章不同,目標名稱在命令列中不受支援。此外,使用此簽章新增的測試不支援命令列或測試屬性中的 產生器表達式