1.0 KiB
1.0 KiB
测试规范
Go 后端测试约定。
- 新逻辑配 table-driven 测试,用例含名字、输入、期望值;
go test ./...全绿才算完成。 - 断言失败时输出
got/want对比,便于定位。 - 辅助函数标注
t.Helper(),清理动作用t.Cleanup()。
常见坑::memory: SQLite 每个连接是独立库
症状:被测代码里有异步 goroutine 写库(如日志异步落库)时,测试偶发 no such table: xxx。
原因:glebarez/sqlite 的 :memory: 数据库按连接隔离;GORM 连接池为新 goroutine 开新连接时,拿到的是一个没跑过 AutoMigrate 的空库。
修复:测试 helper 建库后锁单连接,生产文件库不受影响:
sqlDB, _ := db.DB()
sqlDB.SetMaxOpenConns(1) // :memory: 每连接独立库,异步写复用同一连接
预防:测试涉及「后台 goroutine 写库」时一律加此设置(参照 internal/api/router_test.go 与 internal/service 各测试 helper);异步写路径同时拆出同步内核函数(如 record / Record)供测试直调断言。