测试是 Fuchsia 贡献者为了维持质量和速度而实践的持续集成流程的核心。好的测试会变成团队的资产,而不佳的测试可能会转化为财务负担。
本文档介绍了与 Fuchsia 测试相关的主题,并提供了对其他资源的参考。本文档假定您熟悉一般软件测试概念。
Fuchsia 平台测试应服务于项目目标,并符合 Fuchsia 的架构原则:
- 简单:简单的测试优于复杂的测试。单元测试优于集成测试、系统测试或手动测试。在 Fuchsia 上测试解决方案应使用与生产环境中相同的机制。
- 安全:测试需要遵循与正式版软件相同的安全、隔离和封闭机制。测试会利用相同的机制来获取收益。系统的安全属性是可测试的。
- 如果被测组件发生更改或被完全替换,仅执行组件间接口的测试应继续有效。Fuchsia 树之外的测试不应假定平台组件的实现细节。
- 高性能:在 Fuchsia 上进行测试应该快速、可靠且灵活。如果测试运行得很快,迭代和消耗的资源会更少。测试在 Fuchsia 上运行方式不应不可靠或挑剔。在模拟器上运行测试比在真实硬件上运行更容易。
在 Fuchsia 上进行测试有何不同?
操作系统是复杂的程序
软件开发和测试的每个领域都有独特的挑战。测试操作系统时有一些特殊问题和解决方案,就像测试移动应用、服务器软件或宇宙飞船时一样。
这与典型的应用测试不同,在典型的应用测试中,测试会在假定有效的某个操作系统上运行。
隔离和封闭性
组件框架有助于在组件清单中严格定义的沙盒环境中运行每个组件,从而促进 Fuchsia 的安全目标。然后,它仅允许组件使用那些归类为可更新协定的组件功能进行互连,从而促进了 Fuchsia 的可更新性目标。
这些相同的隔离机制和封闭机制也可以作为依赖项注入的一种形式供测试使用。例如,可以为被测组件提供测试替身,以实现自动化测试框架所依赖的功能,从而简化合约测试。
多个代码库
Fuchsia 是一个具有许多外部依赖项的大型项目,并基于数百个其他源代码库进行构建。多代码库开发给测试带来了独特的挑战。一位从事 WebRTC 项目的贡献者发布了一篇博文,其中详细介绍了开发 Fuchsia 时遇到的许多问题和解决方案。