当前位置: 首页 > java >正文

Go 单元测试:如何只运行某个测试函数(精确控制)

本文将手把手教你如何在 Go 项目中只运行某个特定的测试函数,比如 TestPager_url,避免每次都运行整个包的所有测试,提高调试效率。

✅ 场景背景

在日常开发中,Go 测试文件中可能包含多个测试函数:

util/pager_test.go


func TestNewPager(t *testing.T) {...}func TestPager_url(t *testing.T) func TestAdd(t *testing.T) { ... }如果你只想调试其中的 `TestPager_url`,如何操作?---### 🏗️ 项目结构示例以我自己的 Go 项目为例,目录如下:

D:\Myproject\Go\beego_blog2
├── go.mod
├── main.go
└── util
├── pager.go // 实现逻辑(Pager结构体及其方法)
└── pager_test.go // 测试逻辑(包含 TestPager_url 函数)


我们希望**只测试 `TestPager_url` 函数**,而不是整个 `pager_test.go` 文件。---### 🚫 错误示例(很多人第一次会这么写)```bash
go test util/pager_test.go

运行结果可能报错:

undefined: Pager
undefined: NewPager

这是因为:
你只编译了 pager_test.go 文件,没有导入 pager.go 中的定义。


✅ 正确做法:使用 -run 精确匹配测试函数名

👉 在项目根目录执行:
go test -v -run ^TestPager_url$ ./util
参数解析:
参数作用
-v显示详细的测试过程(推荐)
-run用正则表达式匹配函数名
^TestPager_url$精确匹配 TestPager_url,避免误匹配
./util指定测试包目录,而不是文件路径

🧪 示例输出:

PS D:\Myproject\Go\beego_blog2> go test -v -run ^TestPager_url$ ./util
=== RUN   TestPager_url
=== RUN   TestPager_url/Query模式,无原始参数
=== RUN   TestPager_url/Query模式,有原始参数
=== RUN   TestPager_url/Path_模式,_无原始参数
=== RUN   TestPager_url/Path模式,有原始参数
--- PASS: TestPager_url (0.00s)--- PASS: TestPager_url/Query模式,无原始参数 (0.00s)--- PASS: TestPager_url/Query模式,有原始参数 (0.00s)--- PASS: TestPager_url/Path_模式,_无原始参数 (0.00s)--- PASS: TestPager_url/Path模式,有原始参数 (0.00s)
PASS
ok      beego_blog2/util        (cached)

完美,只运行了你想调试的那个函数 ✅!


🎯 补充技巧:模糊匹配多个函数

如果你有很多测试函数,比如:

TestPager_url_basic
TestPager_url_query
TestPager_url_path

你可以用模糊匹配一次运行它们:

go test -v -run Pager_url ./util

🧠 总结

目的命令
只运行某个测试函数go test -v -run ^TestFuncName$ ./包路径
模糊匹配一类测试go test -v -run 关键字 ./包路径
测试整个包go test -v ./util

💡 推荐习惯

  • 始终在包级别测试(而不是对单文件测试)
  • 善用 -run + 正则,提升调试效率
  • -v 查看每个测试子用例是否通过

如果你觉得有帮助,欢迎点赞、收藏或评论交流!
也欢迎你关注我,一起高效掌握 Go!


http://www.xdnf.cn/news/17173.html

相关文章:

  • 【前端】网站favicon图标制作
  • Kubernetes 已弃用 `apps/v1beta1` 版本的 StatefulSet
  • @【JCIDS】【需求论证】联合能力集成与开发系统知识图谱
  • [数组]977.有序数组的平方;209.长度最小的子数组
  • 跨越系统孤岛:4A架构如何实现企业级一体化协同
  • 深度解析 TCP 三次握手与四次挥手:从原理到 HTTP/HTTPS 的应用
  • 【AI论文】iLRM:一种迭代式大型3D重建模型
  • Vue3视频播放组件自定义封装、控制是否自动播放、全屏小屏控制、loading加载、静音播放等样式完全自定义控制,代码复制即用
  • JAVA学习笔记 自增与自减的使用-006
  • uniapp转app时,cover-view的坑
  • Chisel芯片开发入门系列 -- 18. CPU芯片开发和解释8(流水线架构的代码级理解)
  • 基于k8s环境下的pulsar常用命令(下)
  • 创维智能融合终端SK-M424_S905L3芯片_2+8G_安卓9_线刷固件包
  • 计算机网络:目的网络在路由表项中的作用
  • 如何通过 5 种方式将照片从 iPad 传输到电脑
  • MongoDB学习专题(一)介绍安装基本操作
  • 电路基础相关知识
  • 【轮播图】H5端轮播图、横向滑动、划屏效果实现方案——Vue3+CSS position
  • Python爬虫09_Requests用bs4进行数据解析
  • Java、Android及计算机基础面试题总结
  • ubuntu-server安装
  • 外协采购订单的价格差异科目没有产生差异科目问题
  • MongoDB学习专题(二)核心操作
  • 使用buildx构建镜像
  • 蓝桥杯常用java API
  • 东北大学“进化论”赋能具身导航!SE-VLN:基于多模态大模型的自进化视觉语言导航框架
  • wps创建编辑excel customHeight 属性不是标准 Excel Open XML导致比对异常
  • 【qt5_study】2.使用Qt Designer构造UI界面(信号与槽)
  • PHP实战代码解析与应用分享:用户管理、日志,配置管理与文件操作全解析
  • 《C++》继承完全指南:从入门到精通