go测试规范核心是确保go test稳定可维护地验证行为,需严格命名(_test.go、testxxx)、禁用log.fatal/os.exit、用t.fatal报错、表驱动控制粒度、合理隔离依赖。
Go 测试代码规范的核心不是“写得像样”,而是让 go test 能稳定、可读、可维护地验证行为——尤其要避免测试本身成为 bug 温床。
测试文件名和函数签名必须严格匹配
Go 要求测试文件以 _test.go 结尾,且测试函数必须是 func TestXxx(t *testing.T) 形式(Xxx 首字母大写)。不满足则 go test 直接忽略。
- 错误写法:
func testAdd(t *testing.T)(首字母小写)、func TestAdd(t *testing.T)放在util.go里(没加_test.go后缀) - 正确路径示例:
calculator.go对应calculator_test.go - 子测试也需遵守命名:用
t.Run("case_name", func(t *testing.T) { ... }),名称字符串不能含空格或斜杠,否则go test -run匹配失败
不要在测试里调用 log.Fatal 或 os.Exit
这类调用会终止整个测试进程,导致后续测试不执行、覆盖率统计中断、CI 流水线误判为“部分通过”。测试出错唯一合法方式是调用 t.Fatal、t.Error 或 t.Fatalf。