技能概述
fosmvvm-serverrequest-test-generator 是一个面向 Swift Vapor 生态系统的自动化测试生成技能,专为 FOSMVVM 架构设计。该技能基于 VaporTesting 基础设施,为 ServerRequest 类型生成完整的测试套件,涵盖 Show、Create、Update、Delete 等 CRUD 操作的类型安全验证。
核心机制
该技能采用声明式测试范式,通过 TestingApplicationTester.test() 方法将 ServerRequest 类型自动映射为 HTTP 请求:
- 路径推导:从类型名称自动推导 API 端点(
MyRequest→/my) - 方法绑定:根据 Request 协议确定 HTTP 方法(
ShowRequest→ GET,CreateRequest→ POST) - 类型安全响应:
TestingServerRequestResponse<R>提供编译期类型化的body和error访问 - 本地化自动注入:通过
locale参数自动处理多语言请求头
显著优势
1. 零样板代码:无需手动构造 URL、编码 JSON 或设置 HTTP 头
2. 编译期安全:响应体自动解码为关联类型 R.ResponseBody,避免运行时类型错误
3. 多语言原生支持:内置 en, es, enUS, enGB 等便捷 locale 常量,支持循环多语言测试
4. 错误类型安全:response.error 自动解码为 R.ResponseError 类型,支持精确的错误场景断言
5. 上下文感知:技能自动引用对话上下文中的 ServerRequest 定义,无需重复提供文件路径
局限性
1. 生态依赖:仅适用于 FOSMVVM + Vapor 技术栈,需配套 FOSTestingVapor 模块
2. Swift Testing 绑定:测试代码生成依赖 Swift Testing 框架(@Suite, @Test, #expect)
3. YAML 本地化要求:多语言测试需预配置 TestYAML 资源目录,需手动处理 ServerRequestError 的枚举本地化测试(因其不遵循 Stubbable 协议)
4. Vapor 版本敏感:依赖特定版本的 VaporTesting API,升级可能需要技能更新
适用人群
- 使用 FOSMVVM 架构开发 Vapor 后端的 Swift 工程师
- 需要为 CRUD API 编写集成测试的开发者
- 重视类型安全、厌恶字符串拼接 URL 的测试驱动开发实践者
- 需要验证多语言本地化响应的国际化项目团队
常规风险
| 风险场景 | 说明 | 缓解措施 |
|---------|------|---------|
| 路由未注册 | 测试前未调用 `app.routes.register(collection:)` | 使用 `withTestApp` 助手统一配置 |
| 解码静默失败 | `ResponseBody` 结构与服务端不匹配导致 `body` 为 nil | 严格保持 ViewModel 协议一致性 |
| 本地化未加载 | YAML 资源未正确初始化 | 确保 `initYamlLocalization` 在测试前置中调用 |
| 误用手动 HTTP | 团队成员习惯性使用 `app.test(.GET, "/path")` | 代码审查中强制执行本技能规范 |
最佳实践建议
- 始终使用
app.testing().test(request, locale:)而非底层 HTTP 客户端 - 为每个错误场景创建独立测试函数,命名遵循
{action}Request_{errorCase}模式 - 对
ServerRequestError枚举采用逐个 case 的显式本地化测试,而非依赖 stub 机制