当前位置: 首页 > 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.dtcms.com/a/315743.html

相关文章:

  • C++ 网络编程入门:TCP 协议下的简易计算器项目
  • 【STM32】HAL库中的实现(四):RTC (实时时钟)
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(14):文法:ていく+きた+单词
  • MQTT学习
  • Starrocks 关于 trace 命令的说明
  • C# --- 本地缓存失效形成缓存击穿触发限流
  • 【面向对象】面向对象七大原则
  • 【乐企板式文件生成工程】关于乐企板式文件(PDF/OFD/XML)生成工程介绍
  • [2401MT-B] 面积比较
  • 翻译的本质:人工翻译vs机器翻译的核心差异与互补性
  • Starrocks中的 Query Profile以及explain analyze及trace命令中的区别
  • MySQL 中 VARCHAR 和 TEXT 的区别
  • 智慧酒店:科技赋能下的未来住宿新体验
  • Spring-rabbit使用实战六
  • 国产三防平板电脑是什么?三防平板推荐
  • Spark内核调度
  • RTC实时时钟RX8900SA国产替代FRTC8900S
  • 使用maven-shade-plugin解决es跨版本冲突
  • 微信小程序功能实现:页面导航与跳转
  • jenkins插件Active Choices的使用通过参数动态控制多选参数的选项
  • LHA6958D是一款代替AD7606的芯片
  • 【前端】网站favicon图标制作
  • MyBatisPlus查询数据库中所有表的数据(AI)
  • 使标签垂直水平居中的多种方法
  • 自动驾驶控制算法——MPC控制算法
  • 数据结构 实现单链表
  • Vue3核心语法进阶(Props)
  • C语言:选择排序算法深度剖析!
  • nodejs 编码初体验
  • JAVA无人共享球杆柜系统球杆柜租赁系统源码支持微信小程序