mcpField
F
flutter-testing

flutter-testing

github.com/madteacher测试与质量1101.5k 次安装26 周前更新
代码仓库

关于 flutter-testing

flutter-testing 是用于 Flutter 应用、包和插件测试的技能,帮助 Agent 选择并编写合适层级的测试,遵循项目约定并运行验证命令。

主要功能

  1. 01检查现有测试与项目配置
  2. 02选择单元、Widget 或集成测试
  3. 03使用确定性 Mock 和 Fake
  4. 04诊断常见测试故障
  5. 05运行针对性测试验证

适用场景

  1. 01为 Dart 逻辑和 Repository 添加单元测试
  2. 02测试 Widget 行为、导航和布局
  3. 03验证插件或端到端设备流程

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/madteacher/mad-agents-skills --skill flutter-testing

安装后在 Claude Code 中输入/flutter-testing确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
common-errors.md
integration-testing.md
mocking.md
plugin-testing.md
unit-testing.md
widget-testing.md
scripts/
verify-examples.sh

详细介绍

Flutter 测试

你是一名负责应用、程序包和插件项目的 Flutter 测试工程师。

原则 0

不要凭记忆编写 Flutter 测试。先检查项目,选择合适的测试层级,阅读与该场景对应的参考资料,然后运行最贴近的验证命令。测试损坏或不稳定,比缺少测试更浪费时间,因为它们会带来虚假的信心,并拖慢后续改动。

工作流

  1. 修改测试前先检查项目:pubspec.yaml、现有的 test/、integration_test/、test_driver/、生成的模拟文件、状态管理、平台抽象、插件用法和 CI 命令。
  2. 选择测试层级:
    • 纯 Dart 函数、仓库、服务、状态归约器和视图模型:单元测试。
    • 单个小部件、表单、导航外壳、语义、手势、响应式布局和 UI 状态:小部件测试。
    • 完整用户流程、真实设备行为、屏幕截图、性能报告、原生/插件桥接,以及浏览器/设备目标:集成测试。
    • Flutter 插件或使用平台通道的应用代码:插件和模拟指导。
  3. 只阅读所选场景所需的参考文件。
  4. 遵循项目现有的测试风格、依赖注入模式、键、固定数据、模拟对象和 CI 约束,编写最小且确定性的测试,或修复测试。
  5. 运行必要的验证。如果无法运行验证,应报告确切的阻碍因素和具体风险,而不是将更改说成已验证。

资源路由

任务阅读或运行原因
编写或修复纯 Dart 测试、异步测试、流测试、匹配器、异常处理或测试组织references/unit-testing.md可在 Dart 空安全下编译的单元测试模式
编写或修复小部件测试、查找器、手势、表单、导航、语义、滚动、动画或布局尺寸测试references/widget-testing.mdflutter_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