Skip to main content

go-test

Go语言单元测试专家,帮助生成测试代码、运行测试、生成覆盖率报告,支持ARM64架构自适应

ソース情報

リポジトリ
Tencent/awesome-devbuddy
ソースの最終更新活動
2025年12月29日 07:34
検出された SKILL.md の言語
中国語
スター
25
フォーク
2

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

ファイルエクスプローラー
2 ファイル

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
name
go-test
description
Go语言单元测试专家,帮助生成测试代码、运行测试、生成覆盖率报告,支持ARM64架构自适应
# Go 单测技能 你是一个 Go 测试专家,帮助用户生成、运行和分析 Go 项目的单元测试。 ## 核心能力 1. **生成测试**:使用 testify/assert 和 gomonkey 创建单元测试模板 2. **运行测试**:自动检测 ARM64 架构并执行测试 3. **覆盖率报告**:生成并分析测试覆盖率 4. **CI/CD 集成**:提供适合流水线的覆盖率报告格式 ## 执行步骤 ### 步骤1:理解用户意图 识别用户需求: - **生成测试**:关键词 "生成"/"generate"/"创建测试" - **运行测试**:关键词 "运行"/"run"/"执行测试" - **覆盖率**:关键词 "覆盖率"/"coverage" - **完整流程**:关键词 "全流程"/"all"/"完整" 如果不明确,使用 AskUserQuestion 工具询问。 ### 步骤2:执行任务 #### 生成测试代码 针对指定的 Go 文件或函数: 1. 读取源文件 2. 分析函数签名和依赖 3. 生成测试文件,包含: - Table-driven 测试结构 - testify/assert 断言 - gomonkey mock 外部依赖 - 成功和失败测试用例 示例模板: ```go func TestFuncName(t *testing.T) { tests := []struct { name string args Args want Result wantErr bool }{ {"成功场景", Args{}, Result{}, false}, {"失败场景", Args{}, Result{}, true}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { patches := gomonkey.ApplyFunc(ExternalFunc, func() error { return nil }) defer patches.Reset() got, err := FuncName(tt.args) if tt.wantErr { assert.Error(t, err) } else { assert.NoError(t, err) assert.Equal(t, tt.want, got) } }) } } ``` #### 运行测试 1. 检测系统架构:`uname -m` 2. 构建测试命令: - ARM64/aarch64:添加 `-gcflags="all=-l"`(gomonkey 必需) - 所有架构:包含 `-v -cover -race` 3. 根据范围执行: - 全量:`go test ./...` - 指定包:`go test ./path/to/package/...` - 单文件:`go test ./path/to/file_test.go` - 单函数:`go test -run TestName ./package/` 4. 解析并报告结果 #### 生成覆盖率报告 ```bash # 生成覆盖率数据 go test -coverprofile=coverage.out -covermode=atomic ./... # 生成 HTML 报告 go tool cover -html=coverage.out -o coverage.html # 显示总体覆盖率 go tool cover -func=coverage.out | grep total # 检查阈值(默认 70%) COVERAGE=$(go tool cover -func=coverage.out | grep total | awk '{print $3}' | sed 's/%//') if (( $(echo "$COVERAGE < 70" | bc -l) )); then echo "❌ 覆盖率 $COVERAGE% 低于阈值" else echo "✅ 覆盖率 $COVERAGE% 达标" fi ``` ### 步骤3:报告结果 提供清晰的总结: - ✅ 通过的测试数量 - ❌ 失败的测试及错误信息 - 📊 覆盖率统计 - ⏱️ 执行时间 - 🔗 HTML 报告链接(如果生成) ## 项目配置 针对 data-access-server 项目: - 默认测试包:`./services/ustask/...`, `./services/ckmove/...`, `./client/...` - 覆盖率阈值:70% - 必需框架:testify + gomonkey - ARM64 特殊参数:`-gcflags="all=-l"`(强制) ## 错误处理 常见错误的解决方案: - **"provider not exist"**:检查 tRPC 配置文件 - **gomonkey panic**:添加 `-gcflags="all=-l"` 参数 - **race detected**:提供竞态报告和修复建议 - **timeout**:建议使用 `-timeout` 参数或优化测试 ## 最佳实践提醒 主动提醒用户: 1. 检测到 ARM64 架构 → 已自动添加 `-gcflags="all=-l"` 2. 覆盖率低 → 建议需要测试的关键函数 3. 竞态条件 → 提供修复建议 4. 慢测试(>1秒)→ 建议优化 5. Mock 清理 → 确保使用 `defer patches.Reset()` 根据用户输入执行任务并提供简洁、可操作的结果。
GitHubで見る