Golang Mockery 生成 Skill(mockery-generate)
何时使用
- •为新的或已有的接口(例如
IPackAuthAccountRepo)编写或更新单元测试,需要 Mock 其依赖。 - •重构服务实现导致依赖接口发生变化,需要同步更新 Mock。
- •希望在仓库内收敛 Mock 生成方式,避免手写 mock struct。
行为概要
- •扫描目标接口定义(根据 speckit.implement 或调用方传入的接口名和包路径)。
- •在接口定义上方补充或校验
//go:generate mockery --name=<Interface> --with-expecter=true注释:go//go:generate mockery --name=IPackAuthAccountRepo --with-expecter=true type IPackAuthAccountRepo interface { // ... } - •在任务总结中提示开发者在本地终端执行:
以生成或更新 Mock 文件。bash
go generate ./...
- •在测试代码中,统一使用 mockery 生成的 Mock 类型:
- •从
mocks包导入 Mock 类型(例如domain/dmservice/mocks)。 - •使用
New<Interface>(t)创建 Mock 实例,并通过EXPECT()/AssertExpectations配置与校验调用。 - •不再手写任何实现接口的临时 struct。
- •从
关键约束
- •禁止手写 Mock:生产代码与测试代码中都不允许手写 Mock 结构体或临时 Stub,实现接口的替身必须来自 mockery 生成的代码。
- •统一命令格式:
go:generate注释必须使用mockery --name=<Interface> --with-expecter=true这一形式,必要时由 Skill 自动补齐。 - •目录约定:Mock 文件推荐放在接口所在包的
mocks/子目录中,以避免循环依赖和命名混乱。 - •CI 友好:生成或更新 Mock 后应保证静态检查(SatCheck 等)不新增 Error 级别问题。
- •更多细节:完整流程、参数与示例见同目录下的
reference.md。