go test运行当前包全部测试用例,不递归子目录;-run参数可精确控制执行范围;-v显示详细日志;-coverprofile生成覆盖率报告。

运行当前包的全部测试用例
直接在项目根目录(或任意含 _test.go 文件的包目录)下执行:
go test。它会自动查找当前目录下所有以
_test.go 结尾的文件,执行其中函数名以 Test 开头、签名为 func(t *testing.T) 的函数。注意:不会递归进入子目录,只测当前包。
运行指定测试函数或匹配模式
用 -run 参数精确控制执行范围:
-
go test -run TestLogin—— 只运行名为TestLogin的函数 -
go test -run ^TestLogin$—— 用正则精确匹配(^和$防止误中TestLoginWithToken) -
go test -run TestLogin.*—— 匹配所有以TestLogin开头的测试函数
常见错误:漏写 ^ 或 $ 导致意外运行多个测试;忘记函数名必须首字母大写且以 Test 开头。
查看测试输出与失败详情
默认情况下,go test 成功时不打印任何日志,失败时才显示错误堆栈和 t.Error/t.Fatal 内容。要强制看到每个测试的开始/结束和 t.Log 输出,加 -v 标志:
go test -v。搭配
-run 使用更高效:go test -v -run TestValidateEmail。
注意:t.Log 在非 -v 模式下完全静默;而 t.Errorf 的内容总会显示,无论是否加 -v。
测试覆盖率与性能分析
生成覆盖率报告:
go test -coverprofile=coverage.out && go tool cover -html=coverage.out -o coverage.html。关键点:
-
-coverprofile必须指定后缀为.out(约定),否则go tool cover不识别 -
-covermode=count可统计行执行次数(默认是set,只标“是否执行过”) - 若测试中调用了外部 HTTP 接口或数据库,务必用
httptest.Server或内存 mock 替代,否则覆盖率数据失真且 CI 可能不稳定
覆盖率数字本身不反映质量,但没覆盖到的分支,大概率也没被验证过逻辑是否正确。










