Go单元测试需定义以Test开头、接收*testing.T参数的函数,存放于_test.go文件中;用t.Error继续执行、t.Fatal终止测试;覆盖正常路径、边界值、错误路径及并发场景;支持go test -v/-run/-cover等命令调试与统计覆盖率。

在 Go 中编写单元测试,核心是为每个需要验证的函数创建以 Test 开头、接收 *testing.T 参数的函数,并用 go test 运行。
Test 函数命名与位置要求
Go 的测试函数必须满足三个条件:
- 函数名以 Test 开头(如 TestAdd)
- 唯一参数类型为 *testing.T
- 放在以 _test.go 结尾的文件中(例如 calculator_test.go),且与被测代码在同一包内(通常不加 test 后缀包名)
用 t.Error 或 t.Fatal 报告失败
测试中通过比较期望值与实际结果来验证逻辑。出错时:
- t.Error(...) 记录错误并继续执行后续断言
- t.Fatal(...) 记录错误并立即终止当前测试函数
- 推荐对关键前置条件(如初始化失败)用 Fatal,对业务逻辑校验多用 Error
覆盖典型业务场景
一个健壮的测试应包含:
- 正常路径(happy path),比如输入合法数字,检查返回值是否符合预期
- 边界情况,如空字符串、零值、最大/最小整数
- 错误路径,比如传入非法参数,检查是否返回正确 error 或 panic 行为(需配合 func() { ... }() + recover 或 testify/assert 的 Panics)
- 并发安全(如涉及 map 或全局状态)可额外写 TestXXXParallel 并调用 t.Parallel()
快速运行与调试技巧
常用命令提升效率:
- go test:运行当前目录所有测试
- go test -v:显示详细输出(包括 t.Log 内容)
- go test -run=TestAdd:只运行指定测试函数
- go test -cover:查看测试覆盖率(需确保有足够分支覆盖)
- 在测试中用 t.Log("debug info") 输出调试信息,搭配 -v 查看










