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

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.lryc.cn/news/611089.html

相关文章:

  • 龙芯(loongson) ls2k1000 openwrt
  • 007TG洞察:高效运营Telegram私域流量:技术挑战与自动化解决方案探索
  • Wisdom SSH:自动化网络配置管理的领航者
  • LangChain入门:内存、记录聊天历史 ChatMessageHistory、模型、提示 ( Prompt )、模式 ( Schema )
  • golang的切片
  • 2025年特种设备作业人员考试题库及答案(流动式起重机Q2)
  • MyBatisPlus查询数据库中所有表的数据(AI)
  • GPU 基础矩阵精规组织教程:从基础作用到实战应用
  • Redis里面什么是sdshdr,可以详细介绍一下吗?
  • 用 Spark 找出最大值:高性能计算的正确姿势
  • 8XC552 系列单片机的定时器 T2 和捕捉比较逻辑是什么
  • 如何通过视觉+自动化组合拳提升UI测试的质量
  • Centos-Stream 10 安装教程(2025版图文教程)
  • Vue2博客项目笔记(第一天)
  • SpringBoot集成STOMP
  • CS231n Lecture11 目标检测和图像分割笔记
  • mq_timedsend系统调用及示例
  • 浮动路由和BFD配置
  • 智能体架构与风险全景:从LLM工作流到OWASP Top 10安全浅谈
  • 本地使用uv管理的python项目怎么部署到服务器?
  • Web存储技术详解:sessionStorage、localStorage与Cookie
  • 每日五个pyecharts可视化图表-bars(4)
  • 手绘风格制图新选择:如何用Excalidraw+cpolar构建你的视觉化工作流?
  • 一次完整的 Docker 启动失败排错之旅:从 `start-limit` 到 `network not found
  • Docker Desktop
  • 利用DeepSeek编写带缓冲输出的V语言程序
  • P1103《书本整理》精讲
  • PowerBI VS QuickBI 实现图表的动态配色
  • linux-系统日志查看指令systemctl
  • 37.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--增加Github Action