应该测试的内容取决于应用类型、开发团队、遗留代码数量以及使用的架构等因素。以下部分概述了初学者在规划应用测试内容时可能需要考虑的事项。
测试目录组织
Android Studio 中的典型项目包含两个目录,用于根据其执行环境保存测试。如以下所述,将测试组织到以下目录中
- The
androidTest
directory should contain the tests that run on real or virtual devices. Such tests include integration tests, end-to-end tests, and other tests where the JVM alone cannot validate your app's functionality. - The
test
directory should contain the tests that run on your local machine, such as unit tests. In contrast to the above, these can be tests that run on a local JVM.
必要的单元测试
遵循最佳实践时,您应该确保在以下情况下使用单元测试
- 单元测试 用于 ViewModel 或演示者。
- 单元测试 用于 数据 层,尤其是存储库。数据层的大部分应该与平台无关。这样做可以让测试替身在测试中替换数据库模块和远程数据源。请参阅有关 在 Android 中使用测试替身 的指南
- 单元测试 用于其他与平台无关的层,如 域 层,例如用例和交互器。
- 单元测试 用于 实用程序类,例如字符串操作和数学。
测试边缘情况
单元测试应该侧重于正常情况和边缘情况。边缘情况是不常见的情况,人类测试人员和大型测试不太可能发现。示例包括以下情况
- 使用负数、零和边界条件进行数学运算。
- 所有可能的网络连接错误。
- 损坏的数据,例如格式错误的 JSON。
- 模拟保存到文件时已满的存储空间。
- 在进程中间重新创建的对象(例如,设备旋转时的活动)。
应避免的单元测试
一些单元测试应该避免,因为它们的价值很低。
- 验证框架或库的正确操作,而不是你代码的测试。
- 框架入口点(如 *活动、片段或服务*)不应该包含业务逻辑,因此单元测试不应该优先考虑。针对活动的单元测试价值很低,因为它们主要覆盖框架代码,并且需要更复杂的设置。仪器测试(如 UI 测试)可以覆盖这些类。
UI 测试
应该采用几种类型的 UI 测试。
- **屏幕 UI 测试** 检查单个屏幕中的关键用户交互。它们执行诸如点击按钮、在表单中键入和检查可见状态之类的操作。每个屏幕一个测试类是一个好的起点。
- **用户流程测试** 或 **导航测试**,涵盖最常见的路径。这些测试模拟用户在导航流程中的移动。它们是简单的测试,有助于检查初始化时的运行时崩溃。
其他测试
还有更多专门的测试,例如截图测试、性能测试和猴子测试。你也可以根据目的对测试进行分类,例如回归测试、可访问性测试和兼容性测试。
进一步阅读
为了隔离测试,你通常需要将被测对象的依赖项替换为虚假或模拟的依赖项,通常称为“测试替身”。继续在Android 中使用测试替身中阅读有关它们的更多信息。
如果你想了解如何创建单元测试和 UI 测试,请查看测试 codelabs。