建议您在此处添加自己的问题(和答案)!
问:如何定义新的单元测试?
答:使用适合语言的结构,例如适用于 C++ 的 GTest。你可以定义新的 文件(如果需要),例如:
(在 BUILD.gn 文件中)
executable("unittests") {
output_name = "scenic_unittests"
testonly = true
sources = ["some_test.cc"],
deps = [":some_dep"],
}
问:如何确保实验能够正常运行?
答:测试在 FUCHSIA_BUILD_DIR/tests.json
文件中表示为条目
由 GN 根据 fx set
的参数生成。创建或更新
tests.json
称为 build 的生成阶段,由
fx set
、fx build
或 fx gen
明确指定。
如果 fx test
找不到您的测试,请先检查 FUCHSIA_BUILD_DIR/tests.json
。
在大多数情况下,商品配置加上 --with
参数,
fx set
命令缺少直接或间接地缺少
错误。如果出现这种情况,只需添加测试 GN 标签或 GN
以传递方式将测试作为 fx set
的 --with
参数的标签
命令,例如:
fx set ... --with //src/sys:tests
对于某些商品配置或款式/规格配置,也可能会被停用测试。如果
在使用 fx set
添加标签后,fx test
未找到测试,请验证
测试没有被 build 规则排除。例如,一项测试可能是
已排除在覆盖率变体中。测试的
BUILD.gn 文件:
group("tests") {
if (!is_coverage) {
deps = [ ":my-test" ]
}
}
如果新添加的测试位于 fx set
定义的产品配置中,但
仍然没有在tests.json
中显示,您可能需要运行fx gen
或fx build
更新 tests.json
,以便 fx test
知道如何运行它。
问:如何在 QEMU 实例上运行此单元测试?
如果 QEMU 有网络的话,很容易就能解决 则不可以。
A(支持网络):在一个终端中使用 fx qemu -N
启动 QEMU 实例。
接下来,在另一个终端上输入 fx test escher_tests
。
此调用会运行 escher_tests
软件包中的所有测试可执行文件。
A(无网络):启动 QEMU 实例 (fx qemu
),然后手动调用
run-test-suite
命令。
在 QEMU shell 中,输入 run-test-suite <test_url>
。
注意了!如果没有网络连接,文件会在以下位置加载到 QEMU 实例中: 启动。重新构建测试后,您需要关闭并重启 QEMU 实例以查看重新构建的测试。
如需退出 QEMU,请dm shutdown
。
问:如何在开发设备上运行此单元测试?
答:可以像在 QEMU 中那样手动调用或 fx test
对正在运行的
设备。
请注意,启动的设备在启动时可能不包含您的二进制文件,但 fx
test
会构建测试二进制文件,将其传送到设备并运行。
同时将输出通过管道传回您的工作站终端。酷!
确保您的设备正在运行(按 Ctrl-D 可启动现有映像),并且 连接到工作站
在您的工作站中,fx test escher_tests
将通过所有
escher_tests
软件包中包含的测试可执行文件。
如需仅运行一个测试可执行文件,请使用以下命令:
fx test <executable-name>
您可以在每个源文件上自动重新构建、安装和运行测试
更改为 fx -i
。例如:fx -i test escher_tests
。
问:在哪里获取测试结果?
答:输出会定向到您的终端。
确实有一种方法可以将测试输出写入文件(包括摘要 JSON) 文件),这也是 CQ 漫游器收集自动运行测试输出的方式。
问:如何停用测试?如何查找并运行已停用的测试?
答:这有多种方法。无论何时进行此类操作 提交错误,并在停用 测试。
将测试标记为不稳定
为此,您可以在代码中添加“flaky”添加到 tags
字段,
测试环境。运行
针对整个测试目标(对应可执行文件)运行。这会导致无法实现此目标
在提交队列中的构建器上运行,并在特殊的 flaky
继续在 CI 中运行测试的构建器。请务必注意
添加注释
更改示例。
如果您只想停用一些属于较大测试目标的测试 您需要将该目标拆分为两个 GN 目标,并将其中一个标记为“不稳定”。
仅限 C++ googletest:为名称添加 DISABLED 前缀
如需停用较大测试可执行文件中的特定测试,请执行以下操作:
则可以将其标记为“已停用”已停用的测试通过其名称
前缀为 DISABLED_
。因此,查找这些方法的一种方式是简单地使用 git grep
DISABLED_
。
如需强制运行已停用的测试,请运行 fx test escher_tests --also-run-disabled-tests
。
仅限 Rust:应用 #[ignore]
属性
如需停用较大的 Rust 测试可执行文件中的特定测试,您可以
为它添加 #[ignore]
标记。它应该在 #[test]
属性下应用。
示例:
#[test]
#[ignore] // TODO(https://fxbug.dev/NNNNN) re-enable this test when de-flaked
fn flaky_test_we_need_to_fix() { ... }
将测试标记为已停用
或者,您也可以在
包含多个测试可执行文件的软件包。为此,请将BUILD.gn
修改为
如下:tests = [ { name = "scenic_unittests", disabled = true } ]
。作为
结果,scenic_unittests
将放入以下目录的 disabled
子目录中:
/pkgfs/packages/<package_name>/0/test
,且不会由 CQ 系统运行。
注释掉测试
如需停用较大测试可执行文件中的特定测试,可以添加注释, 编写出定义该测试的代码
问:如何自动运行一系列测试?如何确保所有依赖项都经过测试?
答:fx test
的主要功能是批量执行。请参阅
运行 Fuchsia 测试,获取有关如何运行多个
测试或测试套件
此外,您可以随时将补丁上传到 Gerrit 并进行 CQ 试运行。
问:如何在 CQ 试运行中运行此单元测试?
答:点击 CQ 试运行(也称为 +1)将获取您的更改正确定义的单位 在多个聊天机器人上测试并运行该聊天机器人,每个聊天机器人对应一个构建目标(x86-64 与 arm64、release 与 debug)。每个作业都有一个输出页面,其中显示了 运行的所有测试
问:如何在单元测试中使用一些构建时工件?
答:最简单的工件只是源目录中的一个文件。对于
您只需将其添加到软件包定义的 resources
属性中即可
代码。例如,您可以在
BUILD.gn
:
rustc_binary("my-great-app") {
with_unit_tests = true
...
}
test_package("my-great-app-tests") {
deps = [
":my-great-app_test",
]
resources = [
{
path = "source.zip"
dest = "testing.zip"
}
]
文件将在环境中以 /pkg/data/testing.zip
的形式提供
将在其中执行测试二进制文件的位置
TODO:如果您希望在构建流程中生成工件,
建议将生成工件的规则添加到 data_deps
test_package
规则的数组。但我还没有试过。更新此内容
部分 :)