Boost.Build 提供了方便的单元测试运行支持。最简单的方法是使用 unit-test
规则,它遵循 通用语法。例如
unit-test helpers_test : helpers_test.cpp helpers ;
unit-test
规则的行为类似于 exe 规则,但在创建可执行文件后,它还会运行可执行文件。如果可执行文件返回错误代码,构建系统也会返回错误,并尝试在下次调用时运行可执行文件,直到它成功运行。此行为确保您不会错过单元测试失败。
有一些专门的测试规则,列在下面
rule compile ( sources : requirements * : target-name ? ) rule compile-fail ( sources : requirements * : target-name ? ) rule link ( sources + : requirements * : target-name ? ) rule link-fail ( sources + : requirements * : target-name ? )
它们被赋予了一组源代码和要求。如果目标名称未提供,则使用第一个源文件名。 compile*
测试试图编译传递的源代码。 link*
规则试图从所有传递的源代码编译和链接应用程序。 compile
和 link
规则期望编译/链接成功。 compile-fail
和 link-fail
规则期望编译/链接失败。
有两个专门的规则用于运行应用程序,它们比 unit-test
规则更强大。 run
规则具有以下签名
rule run ( sources + : args * : input-files * : requirements * : target-name ? : default-build * )
该规则从提供的源代码构建应用程序并运行它,将 args
和 input-files
作为命令行参数传递。 args
参数按字面意思传递,而 input-files
参数的值被视为相对于包含 Jamfile 的路径,并在 b2 从不同目录调用时进行调整。 run-fail
规则与 run
规则相同,除了它期望运行失败。
本节中描述的所有规则,如果成功执行,将创建一个特殊的清单文件来指示测试通过。对于 unit-test
规则,文件名为
,对于其他规则,它被称为 target-name
.passed
。 target-name
.testrun*
规则还会捕获来自程序的所有输出,并将其存储在名为
的文件中。 target-name
.output
如果 preserve-test-targets
特性具有 off
值,则 run
和 run-fail
规则将在运行可执行文件后将其删除。这在一定程度上减少了持续测试环境的磁盘空间需求。 preserve-test-targets
特性的默认值为 on
。
可以通过传递 --dump-tests
命令行选项来打印项目中声明的所有测试目标(unit-test
除外)的列表。输出将由以下形式的行组成
boost-test(test-type
)path
:sources
可以将测试列表、Boost.Build 输出以及测试通过时创建的 *.test
文件的存在/不存在处理成人类可读的测试状态表。此类处理实用程序不包含在 Boost.Build 中。
以下特性会调整测试元目标的行为。
testing.arg
定义一个参数,在执行目标之前,该参数将传递给目标,该参数位于输入文件列表之前。
unit-test helpers_test
: helpers_test.cpp helpers
: <testing.arg>"--foo bar"
;
testing.input-file
指定一个文件,该文件将在命令行上作为参数传递给可执行文件,位于参数之后。由于当前实现的限制,所有文件都必须按字母顺序指定。
testing.launcher
默认情况下,可执行文件直接运行。有时,希望使用一些辅助命令运行可执行文件。您应该使用此属性来指定辅助命令的名称。例如,如果您编写
unit-test helpers_test
: helpers_test.cpp helpers
: <testing.launcher>valgrind
;
用于运行可执行文件的命令将是
valgrind bin/$toolset/debug/helpers_test
test-info
测试说明。这将显示为 --dump-tests
命令行选项的一部分。