Go如何运行单元测试_Go test命令使用说明
发布时间 - 2026-02-01 00:00:00 点击率:次go test 默认仅运行当前包的Test*函数,不递归子目录或加载外部测试;需用./...测整个模块,-run支持正则匹配函数名,t.Log在-v下显示而fmt.Println不显示。
go test 默认行为:只跑当前包的测试函数
运行 go test 时,它不会递归查找子目录,也不会自动加载外部依赖的测试代码,只编译并执行当前目录下以 _test.go 结尾、且包含 Test* 前缀函数的文件。常见误解是以为加了 -v 就能看见所有包的测试,其实只是让输出更详细而已。
容易踩的坑:
- 在项目根目录下执行
go test,结果提示no buildable Go source files——因为根目录通常没有.go源文件,只有main.go或go.mod - 想测整个模块却只写了
go test,实际应使用go test ./... - 测试文件里用了
package main(比如复制了主程序代码),会导致编译失败:cannot use test file *_test.go with package main
如何指定运行某个测试函数或某组测试
go test -run 是最常用的筛选方式,支持正则匹配,但注意它只匹配函数名(不包括包名或路径)。
实操建议:
- 只跑
TestOpenFile:go test -run TestOpenFile - 跑所有以
TestHTTP开头的函数:go test -run ^TestHTTP(^表示开头,需用引号包裹避免 shell 解析:go test -run "^TestHTTP") - 跳过某类测试(比如集成类):
go test -run "^(?!TestIntegration).*$",但更推荐用-tags或构建约束 - 函数名含下划线或数字?没问题,
-run匹配的
是 Go 标识符本身,不是文件名
为什么 go test -v 输出没看到日志或 fmt.Println
go test 默认会捕获测试函数中所有标准输出(包括 fmt.Println、t.Log),只有测试失败或加了 -v 才显示 t.Log;而 fmt.Println 即使加了 -v 也不会输出——这是设计使然,防止干扰测试结果判断。
正确做法:
- 用
t.Log("msg")替代fmt.Println,它会在-v下显示,且带时间戳和测试名前缀 - 调试时临时加
t.Logf("val=%v", x),比打日志更安全 - 如果真要强制刷出
fmt内容(极少见),得加-args并手动 flush:fmt.Fprintln(os.Stdout, "hello"); os.Stdout.Sync(),但不推荐
go test 跑得慢?检查是否误启了 race 检测或 coverage
go test -race 和 go test -cover 都会让编译器插入额外逻辑,显著拖慢执行速度,尤其在大量 goroutine 或循环密集型测试中。本地日常开发建议关闭它们,除非明确需要检测竞态或统计覆盖率。
性能相关要点:
-
-race会让每个内存访问都走检测桩,慢 5–10 倍很常见;启用后还会禁止部分优化,可能掩盖真实性能问题 -
-cover启用后,即使只加-covermode=count,也会在每行插入计数器,影响分支预测和缓存局部性 - CI 中跑覆盖率可以接受,但开发时别养成
alias gt='go test -v -race -cover'这种习惯 - 想快速验证逻辑?直接
go test或go test -v就够了
init()、全局变量、或未清理的临时目录,是比命令参数更隐蔽的性能/稳定性杀手。这些不会报错,但会让测试间产生状态污染,有时只在 CI 上偶然失败。
# go
# ai
# 为什么
# golang
# count
# 标识符
# 全局变量
# 递归
# 循环
# 会让
# 会在
# 需用
# 这是
# 就能
# 主程序
# 还会
# 下划线
# 用了
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
利用vue写todolist单页应用
如何在阿里云虚拟服务器快速搭建网站?
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
EditPlus中的正则表达式 实战(2)
iOS正则表达式验证手机号、邮箱、身份证号等
Laravel中的withCount方法怎么高效统计关联模型数量
JS去除重复并统计数量的实现方法
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
Laravel如何生成URL和重定向?(路由助手函数)
Laravel如何与Inertia.js和Vue/React构建现代单页应用
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
个人网站制作流程图片大全,个人网站如何注销?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
在线制作视频网站免费,都有哪些好的动漫网站?
如何在万网主机上快速搭建网站?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
Laravel如何生成和使用数据填充?(Seeder和Factory示例)
如何在香港服务器上快速搭建免备案网站?
无锡营销型网站制作公司,无锡网选车牌流程?
php json中文编码为null的解决办法
如何构建满足综合性能需求的优质建站方案?
Laravel的Blade指令怎么自定义_创建你自己的Laravel Blade Directives
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
如何在 React 中条件性地遍历数组并渲染元素
如何在七牛云存储上搭建网站并设置自定义域名?
如何生成腾讯云建站专用兑换码?
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
JavaScript数据类型有哪些_如何准确判断一个变量的类型
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
Python数据仓库与ETL构建实战_Airflow调度流程详解
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
,网页ppt怎么弄成自己的ppt?
Python文件操作最佳实践_稳定性说明【指导】
edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
Python文本处理实践_日志清洗解析【指导】
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
Laravel怎么在Blade中安全地输出原始HTML内容
如何挑选优质建站一级代理提升网站排名?
Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
iOS验证手机号的正则表达式
如何用低价快速搭建高质量网站?
如何为不同团队 ID 动态生成多个独立按钮
如何用PHP快速搭建高效网站?分步指南
如何在Ubuntu系统下快速搭建WordPress个人网站?
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)


