SuperAPI AI 工具集

flutter-testing

测试与质量

查看项目

更新于 10-15 22:13

技能介绍

用途:为 Flutter 项目提供测试编写规范,覆盖单元测试、Widget 测试与集成测试,优先级为 P0(关键)。

主要能力与规则:遵循测试金字塔(单元 > Widget > 集成);命名采用 should <behavior> when <condition>;所有测试使用 Arrange、Act、Assert(AAA)结构;共享 Mock 只放在 test/shared/,禁止本地 Mock;_integration_test.dart 只能放在 integration_test/ 目录。UI 断言与交互必须通过 Robot 模式(如 CheckoutRobot),测试体内不得直接使用 find.*/expect()。

Widget 测试与 Mock:在 setUpAll 中使用 TestWrapper.init() 与 tester.pumpLocalizedWidget(...);若 BLoC 在内部创建,则在 setUpAll 中通过 GetIt 注册 Mock BLoC;BLoC 逻辑用 blocTest,状态转换用 whenListen;在 setUp 中始终 stub bloc.state 与 bloc.stream,禁止 any()/anyNamed();加载或流状态使用 settle: false 以验证中间过程转换。

Robot 模式:所有交互与断言放入 *Robot;每个 expectXxxVisible() 需有 expectXxxNotVisible() 配对;将标准滚动(scrollDown、scrollToEnd)与屏幕可见性断言(expectScreenVisible、expectScreenNotVisible)抽取到 BaseRobot 或父类;Widget 测试包含 pumpScreen(bloc:, settle:) 辅助方法;Widget Key 使用 lib/core/keys/ 中的 WidgetKeys 常量,禁止内联 Key('string')。

集成测试:使用 patrolTest 与 IntegrationAuthHelper.loginOrSkip($) 处理需认证流程;原生交互(如系统对话框)使用 $.native.tap() 或 $.native.;创建 robot:final robot = OrdersRobot($.tester),与 Widget 测试共用同一类;仅 $.native. 与导航辅助可留在测试体内。

反模式:禁止内联 Key、any()、本地 Mock、缺失 bloc stub、测试体逻辑、集成测试中的原始 find、test/ 下的 _integration_test.dart、未使用导入、仅快乐路径、单边断言、未检查文本大小写。

验证清单:Repository 优先用 Fake 而非 Mock;每个 ViewModel 有覆盖加载、成功、错误状态的单元测试;每个 View 有使用 Fake ViewModel 的 Widget 测试;关键用户流程至少一个集成测试;flutter test 通过。

限制:资料未提供具体安装命令、依赖版本、收费或平台信息,暂未提供。