SuperAPI AI 工具集

go-unit-tests

测试与质量

查看项目

更新于 10-15 20:29

技能介绍

用途:为 Go 项目生成单元测试,遵循 testify 模式与 Arrange-Act-Assert 方法。适用于为带依赖的结构体编写测试套件、测试独立函数与值对象、创建基于 mock 的单元测试,以及为现有代码补充测试覆盖。

主要能力:提供两种模式。模式一为测试套件,用于被测对象是带注入依赖的结构体,套件结构体持有 sut 与 mock 字段,SetupTest() 在每个测试前初始化 mock 与 sut,SetupSuite() 与 TearDownSuite() 每个套件仅运行一次,用于昂贵初始化(如生成 RSA 密钥、创建临时文件);包名使用 _test 后缀。断言方面,s.Require().Error/NoError/ErrorIs 失败即停止,s.Equal/Empty/True/False 失败后继续,前置条件与错误检查用 Require(),值比较用普通断言;不要手动调用 .AssertExpectations(s.T()),因为 mockery v2 在向 mock 构造函数传入 s.T() 时已自动注册清理。模式二为独立函数,用于独立函数、值对象、校验器或枚举,每个场景一个顶层测试函数,错误检查用 require,值比较用 assert,同一函数多组相似输入时使用表驱动测试。

Mock 规则:mock 位于 test/mocks/,由 mockery v2 或 v3 生成,不要手写;导入路径为 github.com/example/project/test/mocks;向 mock 构造函数传入 s.T();context.Context 参数传 mock.Anything;按类型匹配用 mock.AnythingOfType("pkg.TypeName");可能不被调用的期望(如指标、日志装饰器)加 .Maybe()。

代码风格:每个测试必须有显式的 // Arrange、// Act、// Assert 注释,mock 期望放在 Arrange 块;文件含结构体方法时不添加独立函数,改用结构体私有方法;断言中不使用内联结构体字面量,先赋值给变量;每行最多 120 字符;测试函数名描述被测内容,格式为 TestMethod_Scenario_ExpectedOutcome。

完成前运行 make lint 验证代码符合项目风格。测试完成后回复:Tests Done, Oh Yeah!