该技能面向 Flutter 应用、包与插件项目的测试工程。核心原则是不凭记忆写测试:先检查 pubspec.yaml、现有 test/、integration_test/、test_driver/、生成的 mock 文件、状态管理、平台抽象、插件用法与 CI 命令,再选择测试层级。纯 Dart 函数、仓库、服务、状态 reducer 和 view model 用单元测试;单个 Widget、表单、导航壳、语义、手势、响应式布局和 UI 状态用 Widget 测试;完整用户流程、真机行为、截图、性能报告、原生/插件桥接和浏览器/设备目标用集成测试;涉及平台通道的插件或应用代码参考插件与 mocking 指南。实现时使用项目既有测试风格、依赖注入、keys、fixtures、mocks 与 CI 约束,写最小且确定性的测试或修复。
验证要求:编辑 Dart 测试或生产代码后,先运行最窄的相关命令,如 flutter test test/my_widget_test.dart、flutter test --plain-name "subtree" 或 dart test;改动生成的 Mockito mock 后先运行 dart run build_runner build;移动或桌面集成测试用 flutter test -d <device-id> integration_test/<test_file>.dart;需要 integrationDriver 的浏览器测试用 flutter drive --driver=test_driver/integration_test.dart --target=integration_test/<test_file>.dart -d chrome。若无法验证,需报告具体阻塞与风险,不能声称已验证。
约束:Widget 与集成测试优先使用 package:flutter_test/flutter_test.dart,纯 Dart 测试用 package:test/test.dart;测试用户可见行为与公开契约,不断言私有方法或重建次数;优先用依赖注入、假仓库、假平台接口或 MethodChannel 处理器,避免真实网络、存储、计时器、权限或系统对话框;不用固定 Future.delayed 掩盖异步不确定性;禁用过时命令与 API,如 --no-sound-null-safety、flutter test --platform、tester.trace、tester.takeScreenshot、captureNamed、flutter pub run build_runner build。资料未提供具体项目配置、插件版本或收费信息。