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!