您应该测试什么取决于应用的类型、开发团队、遗留代码量以及所使用的架构等因素。以下部分概述了初学者在规划应用测试时可能需要考虑的事项。
测试目录的组织
Android Studio 中的典型项目包含两个根据执行环境存储测试的目录。按如下所述组织您的测试:
androidTest
目录应包含在真实设备或虚拟设备上运行的测试。此类测试包括集成测试、端到端测试以及 JVM 无法单独验证您的应用功能的其他测试。test
目录应包含在您的本地机器上运行的测试,例如单元测试。与上述不同,这些测试可以在本地 JVM 上运行。
重要的单元测试
遵循最佳实践时,您应确保在以下情况下使用单元测试:
- 用于 ViewModel 或 Presenter 的单元测试。
- 用于数据层的单元测试,特别是存储库。数据层的大部分内容应与平台无关。这样做使得测试替身能够在测试中替换数据库模块和远程数据源。请参阅关于在 Android 中使用测试替身的指南。
- 用于其他与平台无关的层的单元测试,例如领域层,就像用例和交互器一样。
- 用于实用程序类的单元测试,例如字符串操作和数学运算。
测试边缘情况
单元测试应同时关注正常情况和边缘情况。边缘情况是人工测试人员和大型测试不太可能发现的罕见场景。例如,以下情况:
- 使用负数、零和边界条件的数学运算。
- 所有可能的网络连接错误。
- 损坏的数据,例如格式错误的 JSON。
- 模拟在保存到文件时存储空间已满。
- 在进程中途重新创建对象(例如设备旋转时重新创建 Activity)。
应避免的单元测试
有些单元测试应避免,因为它们的价值较低:
- 验证框架或库而非您的代码是否正常运行的测试。
- 框架入口点(例如 activity、fragment 或 service)不应包含业务逻辑,因此单元测试不应作为优先事项。针对 activity 的单元测试价值不大,因为它们主要覆盖框架代码并且需要更复杂的设置。插桩测试(例如 UI 测试)可以覆盖这些类。
UI 测试
您应该使用以下几种类型的 UI 测试:
- 屏幕 UI 测试检查单个屏幕中的关键用户交互。它们执行诸如点击按钮、在表单中输入内容和检查可见状态等操作。每个屏幕一个测试类是一个很好的起点。
- 用户流程测试或导航测试,覆盖最常见的路径。这些测试模拟用户在导航流程中的移动。它们是简单的测试,有助于检查初始化过程中的运行时崩溃。
其他测试
还有更多专门的测试,例如屏幕截图测试、性能测试和monkey 测试。您还可以按目的对测试进行分类,例如回归测试、无障碍功能测试和兼容性测试。
延伸阅读
为了进行隔离测试,您通常需要将测试对象(subject under test)的依赖项替换为伪造或模拟依赖项,这些通常被称为“测试替身 (Test doubles)”。继续阅读在 Android 中使用测试替身以了解更多信息。
如果您想学习如何创建单元测试和 UI 测试,请查看测试 Codelab。