测试 Flutter 应用
您的应用功能越多,手动测试就越困难。自动化测试有助于确保您的应用在发布前能够正常运行,同时保持您的功能和错误修复速度。
自动化测试分为几个类别
总的来说,一个经过良好测试的应用应该有许多单元测试和 Widget 测试,通过 代码覆盖率 进行跟踪,再加上足够的集成测试来覆盖所有重要的用例。这个建议基于不同类型的测试之间存在权衡,如下表所示。
权衡 | 单元 | 小部件 | 集成 |
---|---|---|---|
信心 | 低 | 较高 | 最高 |
维护成本 | 低 | 较高 | 最高 |
依赖项 | 少 | 多 | 最多 |
执行速度 | 快 | 快 | 慢 |
单元测试
#单元测试 会测试单个函数、方法或类。单元测试的目的是在各种条件下验证逻辑单元的正确性。被测试单元的外部依赖项通常会被 模拟。单元测试通常不读取或写入磁盘、不在屏幕上渲染、也不接收来自测试运行进程之外的用户操作。有关单元测试的更多信息,您可以查看以下示例或在终端中运行 flutter test --help
。
示例
#Widget 测试
#Widget 测试(在其他 UI 框架中称为 组件测试)会测试单个 Widget。Widget 测试的目的是验证 Widget 的 UI 看起来和交互是否符合预期。测试 Widget 涉及多个类,并需要一个提供适当 Widget 生命周期上下文的测试环境。
例如,被测试的 Widget 应该能够接收用户操作和事件并响应,执行布局,并实例化子 Widget。因此,Widget 测试比单元测试更全面。但是,与单元测试一样,Widget 测试的环境会替换为比完整 UI 系统简单得多的实现。
示例
#集成测试
#集成测试 会测试完整的应用或应用的大部分内容。集成测试的目的是验证正在测试的所有 Widget 和服务是否按预期协同工作。此外,您还可以使用集成测试来验证应用的性能。
通常,集成测试 会在真实设备或操作系统模拟器(如 iOS Simulator 或 Android Emulator)上运行。被测试的应用通常会与测试驱动代码隔离,以避免扭曲结果。
有关如何编写集成测试的更多信息,请参阅 集成测试页面。
示例
#持续集成服务
#持续集成 (CI) 服务允许您在推送新代码更改时自动运行测试。这可以及时提供反馈,表明代码更改是否按预期工作且没有引入 bug。
有关在各种持续集成服务上运行测试的信息,请参阅以下内容: