Go测试与性能分析
测试与性能分析
Go 内置测试框架,无需第三方测试库即可完成单元测试、基准测试和示例测试。
单元测试
测试文件命名:*_test.go,与被测文件同包。
1 | // mathutil/add.go |
运行:
1 | go test ./... # 所有包 |
表驱动测试
Go 社区推荐的测试写法:
1 | func TestAdd(t *testing.T) { |
子测试与并行
1 | t.Run("subtest", func(t *testing.T) { |
基准测试(Benchmark)
1 | func BenchmarkAdd(b *testing.B) { |
1 | go test -bench=. -benchmem ./mathutil |
-benchmem 显示内存分配次数,优化性能时重点关注 allocs/op。
示例测试
示例代码会作为文档展示,也可验证输出:
1 | func ExampleAdd() { |
Mock 与接口
Go 测试依赖接口实现 mock:
1 | type UserRepo interface { |
常用 mock 工具:testify/mock、gomock。
pprof 性能分析
1 | import _ "net/http/pprof" |
1 | go tool pprof http://localhost:6060/debug/pprof/profile?seconds=30 |
测试最佳实践
- 测试文件与被测代码同包(白盒)或
_test后缀包(黑盒) - 用表驱动测试覆盖多种输入
- CI 中运行
go test -race -cover ./... - 基准测试对比优化前后结果
- 集成测试可用 testcontainers 或 docker-compose
小结
go test是 Go 测试核心,表驱动是标准写法- Benchmark 衡量性能,pprof 定位瓶颈
- 面向接口设计便于 mock 和单元测试