🧪 测试辅助
pkg/composerutils/test_utils.go 提供 TestHelpers,封装测试中常用的临时目录与文件断言,减少样板代码。
TestHelpers
go
type TestHelpers struct{}
func NewTestHelpers() *TestHelpersTestHelpers 是一个无状态的工具结构,所有方法接收 *testing.T,失败时直接调用 t.Fatalf/t.Errorf。
方法清单
| 方法 | 签名 | 说明 |
|---|---|---|
CreateTempDir | (t *testing.T) string | 创建临时目录,返回路径 |
RemoveTempDir | (t *testing.T, dir string) | 递归清理临时目录 |
CreateTestFile | (t *testing.T, dir, name string, content []byte) string | 在目录中创建测试文件 |
AssertFileExists | (t *testing.T, path string) | 断言文件存在 |
AssertFileNotExists | (t *testing.T, path string) | 断言文件不存在 |
AssertFileContent | (t *testing.T, path string, expectedContent []byte) | 断言文件内容一致 |
示例
go
package mypkg_test
import (
"testing"
"github.com/scagogogo/composer-skills/pkg/composerutils"
)
func TestSomething(t *testing.T) {
h := composerutils.NewTestHelpers()
// 准备临时环境
dir := h.CreateTempDir(t)
defer h.RemoveTempDir(t, dir)
// 创建测试文件
path := h.CreateTestFile(t, dir, "composer.json", []byte(`{"name":"test"}`))
// 断言
h.AssertFileExists(t, path)
h.AssertFileContent(t, path, []byte(`{"name":"test"}`))
h.AssertFileNotExists(t, dir+"/nonexistent")
}设计要点
- 自动失败:断言失败直接通过
t报错,无需手写if got != want { t.Errorf(...) }。 - 清理安全:
RemoveTempDir用os.RemoveAll,defer 调用即可。 - 无侵入:不依赖任何测试框架,仅用标准
testing包。
与 Mock 接口的配合
典型测试流程:用 TestHelpers 准备真实临时文件系统 → 用 Mock 接口 替换命令执行 → 断言结果。两者组合覆盖了项目的 450+ 测试用例。