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) 签名添加的测试支持使用 generator expressions,这些表达式在通过 set_property(TEST)set_tests_properties() 设置的测试属性中。只能在创建测试的目录中设置测试属性。

add_test 选项包括

COMMAND

指定测试命令行。

如果 <command> 指定了由 add_executable() 创建的可执行目标

  • 那么在构建时,由该可执行目标创建的位置将自动替换该 <command>

  • 在 3.3 版本中新增: 目标的 CROSSCOMPILING_EMULATOR(如果已设置),将用于在主机上运行该命令

    <emulator> <command>
    

    3.29 版本中更改:仅在 交叉编译 时使用模拟器。请参见策略 CMP0158

  • 3.29 版本中添加:目标的 TEST_LAUNCHER(如果已设置)将用于启动命令

    <launcher> <command>
    

    如果 CROSSCOMPILING_EMULATOR 也已设置,则同时使用这两者

    <launcher> <emulator> <command>
    

可以使用 生成器 表达式 指定命令。

配置

仅限于指定配置,对测试执行限制。

工作目录

设置要执行测试的测试属性 WORKING_DIRECTORY。如果未指定,则会在 CMAKE_CURRENT_BINARY_DIR 中运行测试。可以使用 生成器 表达式 指定工作目录。

命令扩展列表

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 签名不同,命令行中不支持目标名称。此外,使用此签名添加的测试不支持命令行或测试属性中的 生成器 表达式