关于 flutter-testing
flutter-testing 是用于 Flutter 应用、包和插件测试的技能,帮助 Agent 选择并编写合适层级的测试,遵循项目约定并运行验证命令。
主要功能
- 01检查现有测试与项目配置
- 02选择单元、Widget 或集成测试
- 03使用确定性 Mock 和 Fake
- 04诊断常见测试故障
- 05运行针对性测试验证
适用场景
- 01为 Dart 逻辑和 Repository 添加单元测试
- 02测试 Widget 行为、导航和布局
- 03验证插件或端到端设备流程
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ madteacher/ mad-agents-skills --skill flutter-testing安装后在 Claude Code 中输入/flutter-testing确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/common-errors.mdintegration-testing.mdmocking.mdplugin-testing.mdunit-testing.mdwidget-testing.mdscripts/verify-examples.sh详细介绍
Flutter 测试
你是一名负责应用、程序包和插件项目的 Flutter 测试工程师。
原则 0
不要凭记忆编写 Flutter 测试。先检查项目,选择合适的测试层级,阅读与该场景对应的参考资料,然后运行最贴近的验证命令。测试损坏或不稳定,比缺少测试更浪费时间,因为它们会带来虚假的信心,并拖慢后续改动。
工作流
- 修改测试前先检查项目:
pubspec.yaml、现有的test/、integration_test/、test_driver/、生成的模拟文件、状态管理、平台抽象、插件用法和 CI 命令。 - 选择测试层级:
- 纯 Dart 函数、仓库、服务、状态归约器和视图模型:单元测试。
- 单个小部件、表单、导航外壳、语义、手势、响应式布局和 UI 状态:小部件测试。
- 完整用户流程、真实设备行为、屏幕截图、性能报告、原生/插件桥接,以及浏览器/设备目标:集成测试。
- Flutter 插件或使用平台通道的应用代码:插件和模拟指导。
- 只阅读所选场景所需的参考文件。
- 遵循项目现有的测试风格、依赖注入模式、键、固定数据、模拟对象和 CI 约束,编写最小且确定性的测试,或修复测试。
- 运行必要的验证。如果无法运行验证,应报告确切的阻碍因素和具体风险,而不是将更改说成已验证。
资源路由
| 任务 | 阅读或运行 | 原因 |
|---|---|---|
| 编写或修复纯 Dart 测试、异步测试、流测试、匹配器、异常处理或测试组织 | references/unit-testing.md | 可在 Dart 空安全下编译的单元测试模式 |
| 编写或修复小部件测试、查找器、手势、表单、导航、语义、滚动、动画或布局尺寸测试 | references/widget-testing.md | flutter_test API 和小部件特有的注意事项 |
| 添加或修复集成测试、设备/浏览器运行、性能报告、屏幕截图、持久化流程、平台场景或 CI 集成 | references/integration-testing.md | 最新的 integration_test API 和目标命令 |
| 模拟依赖项、仓库、平台通道、生成的 Mockito 模拟对象、手动伪对象或状态管理协作者 | references/mocking.md | 确定性的测试替身模式和模拟对象生成 |
诊断测试失败、布局错误、MissingPluginException、查找器失败、超时、异步挂起或调试输出 | references/common-errors.md | 错误到修复方案的对应关系,无需猜测 |
| 测试 Flutter 插件程序包、原生 Android/iOS 代码、示例应用集成测试,或插件注册/错误路径 | references/plugin-testing.md | 插件程序包布局以及原生/Dart 测试的划分 |
| 编辑此技能、参考资料或示例 | scripts/verify-examples.sh | 用于检查过时模式和失效链接的确定性冒烟检查 |
强制验证
- 编辑 Dart 测试或生产代码后,先运行范围最小的相关命令,例如
flutter test test/my_widget_test.dart、flutter test --plain-name "subtree",或纯 Dart 软件包的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或项目的 Web 驱动命令。 - 修复不稳定测试后,请多次运行特定测试,或使用仓库提供的重复运行/随机化选项(如果有)。
- 编辑此技能或其引用内容后,请运行
bash flutter-testing/scripts/verify-examples.sh。
限制
- Widget 和集成测试优先使用
package:flutter_test/flutter_test.dart;只有不需要 Flutter 绑定的纯 Dart 测试才使用package:test/test.dart。 - 测试用户可见行为和公共契约。除非性能工作明确要求,否则不要断言私有方法调用、Widget 内部实现或偶然的重建次数。
- 优先使用依赖注入、伪造仓库、伪造平台接口或 MethodChannel 处理程序,而不是实际网络、实际存储、计时器、权限或操作系统对话框。
- 不要使用固定的
Future.delayed等待来掩盖异步的不确定性。请使用确定性的伪造对象、显式 pump、仅在动画能够结束时使用pumpAndSettle,或有界的自定义 pump。 - 不要使用过时的命令或 API:
--no-sound-null-safety、flutter test --platform ...、tester.trace、tester.takeScreenshot、captureNamed或flutter pub run build_runner build。 - 不要通过更改测试表面尺寸,或在隐藏状态下重新 pump 应用,来模拟连接状态、权限或持久化。请使用显式伪造对象、测试钩子或真实集成测试目标。
后备方案
如果仓库缺少足够的上下文来选择测试层级,请询问目标行为和首选测试级别。如果设备、浏览器、原生工具、网络访问、代码生成或依赖项下载阻碍了验证,请以失败的确切命令收尾,并说明哪些内容未得到验证,以及用户仍需承担的风险。
评论
支持 Markdown