agent-plugins示例目录教程:valid/invalid测试夹具实战演练

agent-plugins示例目录教程:valid/invalid测试夹具实战演练 agent-plugins示例目录教程valid/invalid测试夹具实战演练【免费下载链接】agent-plugins项目地址: https://gitcode.com/GitHub_Trending/skills16/agent-pluginsagent-plugins是官方维护的 Flutter/Dart 智能体技能插件集合其配套的 Skills CLI 工具位于 tool/generator/用于从文档自动生成SKILL.md。本教程带你走进它的测试目录实战演练valid/invalid 测试夹具——看看官方如何在测试中构造合法配置与非法配置两种场景用测试夹具精准验证技能校验器的每一条规则是学习 Dart 测试设计模式的绝佳范例。一、先搞清楚测试夹具是什么 测试夹具Test Fixture就是测试用的样例数据。写校验类代码时最稳妥的办法是准备两套数据夹具类型作用期望结果✅valid合法完全符合规则的配置校验通过不报错❌invalid非法违反某一规则的故意错误配置校验失败且报出对应错误冷知识打开本项目你会发现它并没有单独的fixtures/valid、fixtures/invalid静态目录而是把夹具直接写在测试代码里、运行到临时目录中。这种方式零文件污染、隔离性更好非常值得借鉴。二、认识主角技能校验命令被测试的目标是validate-skill命令源码在 validate_skill_command.dart。它会检查 YAML 配置文件是否满足这些规则根节点必须是 YAML 列表且列表非空每一项必须是 Map且包含name、description、resources三个必填字段技能名必须是 kabob-case如abc-defflutter_skills.yaml中的技能名必须以flutter-开头resources列表不能为空且 URL 必须使用 HTTPS各字段类型必须正确name、description必须是字符串配套的真实配置文件 resources/flutter_skills.yaml 本身就是一个最大的 valid 夹具——它必须通过全部校验否则工具链就跑不起来。三、valid 夹具实战一条完美配置的诞生打开 validate_skills_input_test.dart第一个用例就是合法场景name: flutter-test-skill // kabob-case ✔ 前缀 ✔ description: A Flutter test skill // 非空字符串 ✔ resources: [https://example.com/doc] // 非空列表、HTTPS ✔测试断言非常反向思维它不检查输出成功而是断言日志中不包含Configuration validation failed.。这正是 valid 夹具的精髓——用无错误来证明全合法。对比手法在 validate_skills_test.dart 里更完整测试先搭好临时目录tempDirskills/validation/写入一份合法配置和一份SKILL.md再运行命令断言日志出现Validating skill: test-skill...。⚙️关键技巧MockClient。测试用MockClient替代真实 HTTP 客户端让https://example.com等假地址可以有内容返回从而完全离线复现网络抓取流程。四、invalid 夹具实战八种故意写错的配置validate_skills_input_test.dart 是本次演练的核心它像清单一样逐条构造非法夹具#invalid 夹具构造触发的错误信息1根节点写成 Map 而非列表Root must be a YAML list.2列表为空[]Configuration list must not be empty.3列表项是普通字符串Item 0 is not a Map.4缺少description、resourcesis missing required field ...5技能名用下划线flutter_skill_invalidmust be kabob-case (e.g. abc-def).6dart-前缀写进flutter_skills.yamlmust start with flutter-.7resources为空列表field resources must not be empty.8URL 使用http://must use secure HTTPS.每个用例都遵循同一个节奏改一个字段 → 断言一条错误让一条规则 一个测试的映射关系一目了然。再往前看validate_skill_command.dart 的配置文件不存在分支则由 validate_skills_test.dart 中传一个不存在的NON_EXISTENT.yaml路径来覆盖——invalid 夹具不只有内容错还有文件缺失这一类。五、进阶演练用 MockClient 制造运行时异常夹具内容合法不代表流程顺利。validate_skills_test.dart 展示了更高级的夹具设计用 MockClient 抛异常来模拟网络故障。模拟抓取失败throw Exception(Network Error)断言日志出现Error validating ...模拟评分接口崩溃抓取地址正常返回但 Gemini 接口抛错断言出现Failed to generate validation report模拟干跑模式--dry-run时断言不调用Gemini、不写验证报告文件 这类夹具的通用套路happy path 用返回正常数据的 Mock异常路径用抛错的 Mock。两者合起来测试才算覆盖了完整的运行时行为。六、动手跑起来验证你的理解在仓库根目录安装依赖后进入工具目录即可运行全部测试cd tool/generator dart test如果你希望亲手加一条 invalid 用例只需照抄现有模板在setUp的临时目录里写入新的错误配置调用runValidation再用expect(logs, contains(...))断言目标错误信息即可——这正是夹具驱动开发的魅力规则、数据、断言三位一体。 延伸阅读校验规则实现validate_skill_command.dart输入校验测试validate_skills_input_test.dart端到端验证测试validate_skills_test.dart真实合法配置夹具flutter_skills.yaml技能 lint 规则skills_lint.yaml七、小结从 agent-plugins 学到的 3 个夹具设计要点valid 夹具断言无错合法场景靠不包含失败信息来证明避免假阳性invalid 夹具一错一测每种违规独立成用例错误信息与规则一一对应Mock 即夹具MockClient让网络边界可离线、可异常化覆盖真实运行时才会暴露的分支掌握这套 valid/invalid 演练思路后无论写配置解析器还是 AI 工作流工具你都能快速搭起高覆盖率的测试骨架。【免费下载链接】agent-plugins项目地址: https://gitcode.com/GitHub_Trending/skills16/agent-plugins创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考