用途:为特定 Go 代码库提供测试编写约定,在创建测试文件、编写单元或集成测试、选择 mock、搭建测试夹具时使用。
主要能力与规则:接口若已有 mockery 生成的 Moq* mock(存在 _mock.go 文件),必须使用它,不得手写 mock 结构体;接口变更后需在模块根目录运行 mockery(无参数)重新生成。测试不需要断言日志输出时使用 logger.NoopLogger{},它已实现完整 Logger 接口,不要为满足接口另造 mock logger;需要验证具体日志调用(如断言 Warning 被以特定消息调用)时才用 logger.MoqLogger{}。接口没有 mock 文件(如 MultiSelectSelector[T])时,在测试文件内写内联 mock,创建前可用 ls installer/<package-path>/_mock.go 检查是否已存在。
命名与断言:测试名格式为 Test_<DescriptiveStatement>,描述行为而非实现。断言统一使用 testify/require;检查错误时按关键词匹配,如 require.Error(t, err) 配合 require.Contains(t, err.Error(), "not found"),不要用 require.EqualError 匹配完整错误消息。
测试类型:单元测试验证单个函数或方法,用 mock 隔离,放在被测代码同一包内,每个测试验证单一行为。表驱动测试用于同一函数的多个场景。集成测试验证组件间交互(含依赖操作系统的交互),放在 test 包(如 brew_test),采用 BDD 风格命名 Test_<gerund>Should<behavior>When<condition>,并允许通过 testing.Short() 跳过。
技术栈:testify/require 做断言(错误检查不用 assert)、mockery 配合 moq 模板生成 mock(见 .mockery.yml)、logger.NoopLogger{} 作为静默 logger。
限制:以上为该项目特定约定,其他项目是否适用暂未提供;具体安装与配置细节资料未展开。