测试工具函数必须接收testing.T或testing.B,首参数须为测试上下文;应统一放在testutil包中,用t.Cleanup()管理清理,写入操作用t.TempDir(),禁止硬编码路径或os.Chdir()。
测试工具函数必须接收 *testing.T 或 *testing.B
Go 的测试框架要求所有测试辅助函数显式接收 *testing.T 或 *testing.B,否则无法正确报告失败、跳过或计时。直接在工具函数里调用 t.Fatal() 或 b.ResetTimer() 是合法的,但前提是参数传进来了。
常见错误是写一个无参的 setupDB(),然后在测试里调用它——一旦内部出错,测试会 panic 而非标记为失败,CI 里难以定位。
- 所有可复用的 setup/teardown 工具函数,首参数必须是
*testing.T(或*testing.B) - 避免在工具函数中隐式依赖全局
testing.T实例(Go 不提供) - 如果需要提前终止测试,用
t.Fatalf(),不要用log.Fatal()或os.Exit()
用 testutil 包统一管理测试工具,不放 main_test.go
把测试工具散落在各个 _test.go 文件里会导致重复、版本不一致、难以发现。应该新建 testutil/ 目录,导出清晰命名的函数,比如 testutil.NewTestDB(t)、testutil.MustReadFile(t, "fixture.json")。
这个包本身不依赖具体业务逻辑,只依赖 testing 和标准库,方便跨项目复用。