Boost C++ Libraries

PrevUpHomeNext

测试

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* 规则试图从所有传递的源代码编译和链接应用程序。 compilelink 规则期望编译/链接成功。 compile-faillink-fail 规则期望编译/链接失败。

有两个专门的规则用于运行应用程序,它们比 unit-test 规则更强大。 run 规则具有以下签名

rule run ( sources + : args * : input-files * : requirements * : target-name ?
    : default-build * )

该规则从提供的源代码构建应用程序并运行它,将 argsinput-files 作为命令行参数传递。 args 参数按字面意思传递,而 input-files 参数的值被视为相对于包含 Jamfile 的路径,并在 b2 从不同目录调用时进行调整。 run-fail 规则与 run 规则相同,除了它期望运行失败。

本节中描述的所有规则,如果成功执行,将创建一个特殊的清单文件来指示测试通过。对于 unit-test 规则,文件名为 target-name.passed,对于其他规则,它被称为 target-name.testrun* 规则还会捕获来自程序的所有输出,并将其存储在名为 target-name.output 的文件中。

如果 preserve-test-targets 特性具有 off 值,则 runrun-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 命令行选项的一部分。


PrevUpHomeNext