goland中“run all tests”常无效,因默认按上下文推断包;真正全量测试需配置go test运行配置,package填./并勾选include subdirectories,加-v等参数。

GoLand 里运行单元测试不是点一下就完事,关键看你想跑什么范围、用什么方式触发——默认按钮经常只跑当前上下文,很容易漏包、报 no test files 或压根没反应。
为什么点“Run All Tests”经常没效果
GoLand 的“Run All Tests”按钮会根据你当前光标位置、打开的文件、甚至 Project Tool Window 里选中的节点,自动推断要测试的 package。结果就是:
- 你在
main.go里点 → 只跑main包(而main包不能写测试) - 你在
engine/handler_test.go里右键 → 只跑engine,api/和internal/全被跳过 - 项目没识别为 Go Module(缺
go.mod)→go test ./行为异常,甚至静默失败
真正覆盖全部子目录下 *_test.go 文件的命令只有一个:go test ./。那个 ./ 是递归开关,go test 或 go test . 都不行。
怎样配置一个真正“一键运行全部测试”的 Run Configuration
手动敲命令太慢?建个永久配置,绑定快捷键,下次 Ctrl+Shift+F10 就能全量跑:
- 点击右上角运行配置下拉框 → “Edit Configurations…”
- 左上角 + → 选择 “Go Test”
- “Package” 字段填:
./(必须是斜杠,不是点) - 确认勾选 “Include subdirectories”(2023.3+ 默认开,但建议手动核对)
- 在 “Program arguments” 里加常用参数:
-v -count=1 -coverprofile=coverage.out
保存后,这个配置图标是不透明的,代表已持久化。临时配置(半透明图标)改了参数不保存,下次运行就丢。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
如何精准运行某个子测试(t.Run)
GoLand 默认不展开 t.Run 里的子测试,但你可以手动触发,前提是格式严格:
- 子测试名必须是纯 ASCII 字符串字面量,比如
"valid_input"✅,"valid input"❌,"valid/input"❌ - 光标必须停在
t.Run("xxx", ...)的引号内部 - 在 “Program arguments” 里写:
-run "TestParseConfig/valid_input"(英文双引号不可省) - 不加引号、或用单引号,GoLand 会截断 pattern,
go test收不到完整匹配式
注意:-run 是正则匹配,但子测试路径分隔符只能是斜杠,且不能嵌套过深(比如 TestA/B/C 可能被截断),实际项目中建议控制在两层以内。
t.Log 不输出?-v 参数不是可选项
t.Log 和 t.Logf 默认完全不打印到控制台,这不是 GoLand 的 bug,是 go test 的默认行为。不加 -v,再详细的日志也看不到。
- 必须在 “Program arguments” 里显式加上
-v -
-v对性能几乎无影响,但大量日志可能拖慢终端渲染 - 如果用了
-run精准匹配子测试,-v依然生效,只是只显示匹配到的那个测试的 log
真正容易被忽略的是:子测试名和结构体字段之间的隐式契约——名字必须可静态提取,字段顺序必须稳定,路径分隔符只能用斜杠。这些不满足,IDE 菜单就消失,但命令行永远可用:go test -run=TestParse/divide_by_zero。










