VS Code Go扩展运行TestSum测试时错误指定main包的配置排查
问题根因
你当前用的v0.23.2版本VS Code Go扩展,存在Go Modules场景下的测试包路径解析bug,默认错误把测试目标包硬识别为main,才拼接出了报错里的执行命令:/usr/local/go/bin/go test -timeout 30s -run ^TestSum$ main
这个问题和你本地zsh的Go环境配置、项目本身代码都没关系——你手动在项目目录执行测试命令能正常跑通,恰恰证明你的Go环境、模块配置全是正常的。
可直接调整的配置项
- 强制开启扩展的模块感知模式
打开VS Code设置(macOS快捷键Cmd + ,),搜索go.toolsEnvVars,新增如下配置,强制工具链走Go Modules的解析逻辑,不要回退到老旧的GOROOT路径查找规则:"go.toolsEnvVars": { "GO111MODULE": "on" } - 移除测试配置里的硬编码路径
在设置面板里依次搜索以下两个配置,删掉所有硬编码的包路径参数,保持默认空值即可:go.testFlags:不要手动填任何包名参数,留空后扩展会自动解析当前打开目录对应的项目包go.testEnvVars:确认没有残留指向/usr/local/go/src/main这类GOROOT路径的环境变量
- 清理旧的扩展缓存
旧版本扩展很容易存残留的路径缓存,改完上面的配置后,关闭VS Code,找到当前项目对应的工作区缓存目录~/Library/Application Support/Code/User/workspaceStorage/,删除和你mysum项目路径绑定的缓存文件夹,重启VS Code打开项目后,再点击测试运行按钮。此时扩展拼接的执行命令会把错误的main参数替换为当前项目根路径.,就能正常触发mysum包的测试了。
补充:你手动执行
go test -run ^TestSum$ mysum能成功,是因为你在模块根目录手动指定了正确的目标包,而老版本扩展的路径识别bug直接跳过了当前模块的路径扫描,才会一直跑到GOROOT下面找根本不存在的main包。
内容的提问来源于stack exchange,提问作者Juanito Fatas
相关产品推荐
相关产品推荐

