跳到主内容

测试 Flutter 应用

了解有关不同测试类型的更多信息以及如何编写它们。

应用的功能越多,手动测试的难度就越大。自动化测试有助于确保您的应用在发布前运行正常,同时保持您的功能迭代和 Bug 修复的速度。

自动化测试分为几类

  • 单元测试 用于测试单个函数、方法或类。
  • 组件测试(在其他 UI 框架中称为“部件测试”)用于测试单个组件(Widget)。
  • 集成测试 用于测试完整的应用或应用的很大一部分。

一般来说,一个测试充分的应用会包含大量的单元测试和组件测试(由代码覆盖率跟踪),外加足够的集成测试来覆盖所有重要的用例。此建议基于这样一个事实:不同类型的测试之间存在权衡,如下所示。

权衡单元小部件集成
置信度较高最高
维护成本较高最高
依赖项最多
执行速度

单元测试

#

单元测试用于测试单个函数、方法或类。单元测试的目标是在各种条件下验证逻辑单元的正确性。被测单元的外部依赖通常会被模拟(Mock)掉。单元测试通常不会读取或写入磁盘、渲染到屏幕,也不会接收来自测试运行进程之外的用户操作。有关单元测试的更多信息,您可以查看以下指南,或在终端中运行 flutter test --help

指南

#

组件测试

#

组件测试(在其他 UI 框架中称为“部件测试”)用于测试单个组件(Widget)。组件测试的目标是验证组件的 UI 外观和交互是否符合预期。测试组件涉及多个类,并且需要一个提供相应组件生命周期上下文的测试环境。

例如,被测组件应该能够接收并响应用户操作和事件、执行布局并实例化子组件。因此,组件测试比单元测试更全面。然而,与单元测试一样,组件测试的环境会被替换为一个比完整 UI 系统简单得多的实现。

指南

#

集成测试

#

集成测试用于测试完整的应用或应用的很大一部分。集成测试的目标是验证所有被测组件和服务是否按预期协同工作。此外,您可以使用集成测试来验证应用的性能。

通常,集成测试在真实设备或 OS 模拟器(例如 iOS 模拟器或 Android 模拟器)上运行。被测应用通常与测试驱动程序代码隔离,以避免结果产生偏差。

Flutter SDK 包含 integration_test 软件包。但是,此软件包无法与原生平台 UI 交互,例如权限对话框、通知或原生平台视图。对于需要原生交互的应用,您可以使用 patrol 软件包,这是一个开源框架,通过原生平台支持扩展了 Flutter 的测试能力。

有关如何编写集成测试的更多信息,请参阅集成测试页面

指南

#

持续集成服务

#

持续集成 (CI) 服务允许您在推送新的代码变更时自动运行测试。这可以及时反馈代码变更是否按预期工作,且没有引入 Bug。

有关在各种持续集成服务上运行测试的信息,请参阅以下内容: