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 查看