Skip to content

🧪 测试辅助

pkg/composerutils/test_utils.go 提供 TestHelpers,封装测试中常用的临时目录与文件断言,减少样板代码。

TestHelpers

go
type TestHelpers struct{}

func NewTestHelpers() *TestHelpers

TestHelpers 是一个无状态的工具结构,所有方法接收 *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(...) }
  • 清理安全RemoveTempDiros.RemoveAll,defer 调用即可。
  • 无侵入:不依赖任何测试框架,仅用标准 testing 包。

与 Mock 接口的配合

典型测试流程:用 TestHelpers 准备真实临时文件系统 → 用 Mock 接口 替换命令执行 → 断言结果。两者组合覆盖了项目的 450+ 测试用例。

进阶

基于 MIT 许可证发布