如何在Golang项目中运行所有*_unit_test.go格式文件的测试?
优化Go大型项目CI测试:仅运行
*_unit_test.go中的测试 针对大型Go项目全量测试耗时30分钟的问题,以下是几种仅运行*_unit_test.go测试的可行方案:
方案1:通过测试函数名正则匹配
go test -run接收的是测试名称的正则表达式而非文件名,如果你项目里*_unit_test.go中的测试函数命名有统一规律(比如都以Unit结尾),可以直接用正则过滤:
go test ./... -run=".*Unit$"
注意:如果测试函数命名没有统一规则,这个方法不适用。
方案2:指定测试文件+依赖源文件(不推荐大型项目)
如果要直接指定*_unit_test.go文件,必须同时传入它依赖的所有Go源文件,否则编译会报错。例如某个包下的命令:
go test ./pkg/foo -files foo.go,bar.go,foo_unit_test.go
但大型项目中依赖文件繁多,手动维护成本极高,不建议采用这种方式。
方案3:使用Build Tags精准隔离(推荐)
这是最适合大型项目的方案,步骤如下:
- 在所有
*_unit_test.go文件的最开头添加Build Tag:
//go:build unit // +build unit
(Go 1.16及以上版本只需//go:build unit,兼容旧版本可保留两行)
2. 在CI脚本中运行带unit标签的测试:
go test ./... -tags=unit
这种方式无需修改测试函数命名,也不用处理依赖文件,完全通过编译标签控制测试范围,适配分支CI的需求。
内容的提问来源于stack exchange,提问作者guy_fawkes
相关产品推荐
相关产品推荐

