用途:按合适层级编写与维护 Flutter 测试,包括业务逻辑的单元测试、界面与组件的 Widget 测试、关键流程的集成测试,以及视觉回归的金图测试。
主要能力与建议:
- 测试金字塔:单元测试覆盖业务逻辑、provider、cubit、工具类;Widget 测试覆盖屏幕、组件与交互;集成测试覆盖关键端到端流程(需设备或模拟器,仅在合并到主分支时于 CI 运行)。目标比例约为 70%+ 单元、20–25% Widget、5–10% 集成。
- 单元测试:测用例、仓库实现、Riverpod notifier、Cubit/Bloc、校验器、解析器、映射器、工具类;不测生成的 *.g.dart / *.freezed.dart、无逻辑的值对象、框架组件与纯布局 build 方法。Riverpod 用 ProviderContainer 配合 overrideWithValue,并调用 addTearDown(container.dispose);Bloc/Cubit 用 bloc_test 的 blocTest。
- Widget 测试:每个屏幕至少覆盖 loading、success、error、empty 四种状态,并测用户交互、导航触发与复杂可复用组件。加载态用 tester.pump() 而非 pumpAndSettle,后者可能因等待动画而卡住。Finder 优先级为 byKey、byType、byText;动态列表项应加 Key(如 ValueKey(products[i].id))。
- 集成测试:在 integration_test/app_test.dart 中初始化 IntegrationTestWidgetsFlutterBinding,使用独立测试环境,仅测 Widget 测试无法覆盖的关键路径。
- 金图测试:用于设计系统组件与关键屏幕的视觉回归,设计变更后用 flutter test --update-goldens 更新;可通过 tester.view.physicalSize 覆盖手机与平板断点及明暗模式。
依赖配置(dev_dependencies):flutter_test(sdk: flutter)、mocktail ^1.0.0、bloc_test ^9.1.0、network_image_mock ^2.1.0。
常用 CI 命令:flutter test、flutter test --coverage、genhtml coverage/lcov.info -o coverage/html、flutter test integration_test/ -d <device>、flutter test --update-goldens、flutter test --name "pattern"。覆盖率参考目标:Domain 90%+,Data 与 Presentation 80%+,UI 组件由 Widget 测试覆盖而不计行覆盖率。
限制:资料未提供具体安装步骤、收费与价格信息;示例片段以参考资料形式给出,正文未展开完整长代码。