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()
设置的测试属性中使用 generator expressions
。测试属性只能在创建测试的目录中设置。
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>
可以使用
generator expressions
指定命令。CONFIGURATIONS
限制测试执行仅限于命名的配置。
WORKING_DIRECTORY
设置测试属性
WORKING_DIRECTORY
,测试将在其中执行。如果未指定,测试将在CMAKE_CURRENT_BINARY_DIR
中运行。工作目录可以使用generator expressions
指定。COMMAND_EXPAND_LISTS
3.16 版本新增。
COMMAND
参数中的列表将被展开,包括使用generator expressions
创建的列表。
如果测试命令以代码 0
退出,则测试通过。非零退出代码表示“失败”的测试。测试属性 WILL_FAIL
反转此逻辑。请注意,即使 WILL_FAIL
为 true,系统级测试失败 (例如段错误或堆错误) 仍将使测试失败。写入 stdout 或 stderr 的输出由 ctest(1)
捕获,并且仅通过 PASS_REGULAR_EXPRESSION
、FAIL_REGULAR_EXPRESSION
或 SKIP_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
签名不同,命令行中不支持目标名称。此外,使用此签名添加的测试不支持命令行或测试属性中的 generator expressions
。