CTF 测试指南

遵循 Fuchsia 的最佳做法。

测试必须使用 //sdk/ctf/build 中的 ctf_* 规则变体。

CTF 测试以 SDK 提供的 API 和 ABI 为目标。build 支持可确保测试仅依赖于可通过 SDK 获取的 API 元素,或已列入许可名单以便在 CTF 中使用的 API 元素。所有 build 目标都必须使用 //sdk/ctf/build 中找到的 ctf_ 规则变体,而不是标准 fuchsia.git 规则(即使用 ctf_fuchsia_componentctf_executable 等)。非 SDK 代码的许可名单可以在 //sdk/ctf/build/allowed_ctf_deps.gni 中找到。如果测试作者认为需要添加其他内容,应在 CTF bug 组件中提交 bug。

测试可能依赖于通过 SDK 发布的任何内容。

如果依赖于并非通过 SDK 发布的软件,则由于 Fuchsia 平台内部构件中的无关更改,CTF 测试更容易失败。我们对依赖项的具体情况视具体情况而定。(例如,在树外同样可以正常工作的内部测试框架)。

使用不稳定的测试运行程序的测试必须自带测试运行程序。

使用不稳定的测试运行程序(例如 Rust 测试)的测试必须通过子软件包自带测试运行程序。如需了解详情和查看示例,请参阅 CTF 贡献指南

测试不应具有不稳定的依赖项。

测试不得依赖于可能会消失的内容、间歇性可用的内容,也不得特定于并非总是运行测试的特定平台。此类示例包括互联网服务器和操作系统专用文件路径。

测试必须在 //sdk/ctf/tests 中实现。

如果您对此有疑虑,请联系 fuchsia-ctf-team@google.com

测试应充当如何使用 API 的示例。

通俗来说,如果最终开发者看到测试并复制其对 API 的用法,那么测试作者会认为开发者能够正确使用 API。测试应尽可能不依赖于未记录的、特定于应用的不变量。将来,如果在 Fuchsia 树之外广泛使用未记录的用例,我们可能需要支持不遵循建议用法的用例。

测试不应设置超时。

超时应由测试基础架构强制实施。

测试不应是压力测试或性能测试。

我们不鼓励开发者向 CTF 提交压力测试或性能测试。系统将仔细检查此类测试的覆盖率值。

测试应以平台 Surface 区域的一个元素为目标。

CTF 测试通常直接针对平台 Surface 区域的元素。如果某个测试失败,就应该能够清楚地了解触发了平台界面区域的哪些部分以及更改了的结果是什么。因此,根据此规则,测试中的应用逻辑量通常很小。

测试不应休眠。

休眠是导致测试不稳定的常见原因,因为根据目标硬件和系统负载,各次运行之间的时间差异很大。我们建议开发者设计代码结构,以便在满足给定条件时发送显式信号,而不是让部分测试等待其他代码完成。

测试应避免模拟或伪造目标设备的内部状态。

CTF 旨在确保整个设备正常运行,而不是确保特定组件独立正常运行。

测试应测试极端情况以及典型的输入和输出。

例如,整数值 0 和 MAXINT,以及指针值的 null 指针。

测试应在测试完成后恢复系统的状态。

例如,如果某个测试需要进行系统级更改以设置文本的背景颜色,则应在测试结束时将颜色重置为原始值。这样可以防止测试相互影响。