用途:面向 Flutter 应用、包和插件项目的测试工程,帮助编写、修复、审查、调试和验证测试。核心原则是不凭记忆写测试,先检查项目,再选择正确的测试层级,读取对应参考文件,最后运行最接近的验证命令;因为损坏或不稳定的测试会带来虚假信心并拖慢后续改动。
主要能力与测试层级选择:纯 Dart 函数、仓库、服务、状态 reducer 和 view model 用单元测试;单个 widget、表单、导航壳、语义、手势、响应式布局和 UI 状态用 Widget 测试;完整用户流程、真机行为、截图、性能报告、原生或插件桥接以及浏览器/设备目标用集成测试;使用平台通道的插件或应用代码参考插件与 Mock 指导。
使用方式:先检查 pubspec.yaml、现有 test/、integration_test/、test_driver/、生成的 mock 文件、状态管理、平台抽象、插件使用和 CI 命令。按场景只读取需要的参考文件,然后沿用项目现有测试风格、依赖注入模式、key、fixture、mock 和 CI 约束实现最小且确定性的测试或修复。验证命令示例:flutter test test/my_widget_test.dart、flutter test --plain-name "subtree"、dart test、dart run build_runner build;设备集成测试用 flutter test -d <device-id> integration_test/<test_file>.dart;浏览器集成测试用 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。应测试用户可见行为和公开契约,不断言私有方法调用、widget 内部或偶然的重建次数。优先使用依赖注入、fake 仓库、fake 平台接口或 MethodChannel handler,避免真实网络、存储、定时器、权限或系统对话框。不要用固定 Future.delayed 等待掩盖异步不确定性。禁用过时命令或 API,如 --no-sound-null-safety、flutter test --platform、tester.trace、tester.takeScreenshot、captureNamed、flutter pub run build_runner build。缺少足够上下文时,应询问目标行为和期望测试层级。