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 中已更改:仅当 交叉编译 时才会使用模拟器。请参阅策略 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 签名不同,目标名称在命令行中不受支持。此外,使用此签名添加的测试不支持命令行或测试属性中的 生成器表达式,并且不支持 TEST_LAUNCHERCROSSCOMPILING_EMULATOR 目标属性。