For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt, and this page is available as Markdown at /developers/android/testing/introduction.md.

Android 测试

为什么要写测试?

测试是软件开发的重要组成部分。虽然测试有不同的种类,每种都有独特的用途,但它们存在的根本原因相同:人都会犯错。测试旨在开发过程中尽早捕获这些错误。

通过在问题到达生产环境之前识别它们,我们为节省用户的挫败感和我们自己的调试时间。写测试起初可能感觉像是额外的工作,但当测试在问题影响终端用户之前捕获它时,其价值就变得显而易见。

写测试的好处

  • 早期问题检测:在问题到达生产环境之前捕获 bug。
  • 提升代码质量:测试鼓励更好的设计和可维护性。
  • 节省时间:调试生产问题比在开发过程中解决问题要耗时得多。
  • 用户满意度:生产环境中更少的 bug 带来更好的用户体验。

如何编写有效的测试

为确保清晰性和可维护性,测试函数应始终(在可能的情况下)写成描述性语句。理想情况下,它们应遵循 GIVEN-WHEN-THEN 结构。这种方法使测试即使对于复杂场景也易于一眼理解。

一个命名良好的测试示例:

@Test
fun `Given a user with Home Assistant when they open the app then they see the default dashboard`() {
    // 此处填写测试实现
}

为什么使用 GIVEN-WHEN-THEN?

  • GIVEN:描述初始上下文或设置。
  • WHEN:指定正在测试的操作或事件。
  • THEN:定义预期结果。

这种结构确保测试既易于阅读又自解释,使开发者无需深入实现即可理解测试的目的。

测试类型

虽然本文档聚焦于 Android 测试,但了解不同类型的测试及其用途很重要:

  1. 单元测试:隔离验证各个组件或函数。
  2. 集成测试:确保应用程序的不同部分按预期协同工作。
  3. UI 测试:验证用户界面和用户交互。
  4. 端到端测试:从头到尾测试整个应用程序流程。

每种测试类型在开发过程中都有其位置,测试完善的应用通常包含所有这些类型的组合。

编写测试的最佳实践

  • 保持测试小而专注:每个测试应验证单一行为或场景。
  • 使用描述性名称:测试名称应清晰描述正在测试的内容和预期结果。
  • 避免依赖:测试之间应保持相互独立以确保可靠性。
  • Mock 外部依赖:使用 mock 或 fake 来隔离被测代码。

遵循这些指南,你可以编写既有效又可维护的测试。