
本文介绍如何通过 goconvey -depth=0 精确控制 goconvey 仅运行当前目录(即 main 包)的测试,避免默认递归扫描导致的误执行或性能开销。
本文介绍如何通过 goconvey -depth=0 精确控制 goconvey 仅运行当前目录(即 main 包)的测试,避免默认递归扫描导致的误执行或性能开销。
在 Go 项目中,尤其是采用多包结构时,常需区分「仅测试当前 main 包」与「递归测试所有子包」。使用标准 go test 命令时,go test -v 默认只运行当前目录下的测试(即当前包),而 go test -v ./... 才会递归遍历所有子目录。但 GoConvey 的行为不同:默认启动时会自动递归扫描当前目录及其所有子目录下的 _test.go 文件,这可能导致非预期的测试执行、环境冲突或显著延迟。
要解决这一问题,最直接且官方支持的方式是使用 -depth 参数:
goconvey -depth=0
该参数指定 GoConvey 扫描的目录层级深度:
- -depth=0 → 仅扫描当前工作目录(即 .),等效于 go test 在当前目录的行为;
- -depth=1 → 扫描当前目录 + 一级子目录;
- 默认(无参数)→ 无限递归(等同于 -depth=-1)。
✅ 验证示例:
假设项目结构如下:
myapp/
├── main.go
├── main_test.go
├── cmd/
│ └── server/
│ ├── server.go
│ └── server_test.go
└── internal/
└── utils/
├── util.go
└── util_test.go执行 goconvey -depth=0 后,GoConvey Web 界面将仅显示并运行 main_test.go,而 cmd/server/server_test.go 和 internal/utils/util_test.go 不会被加载或执行。
⚠️ 注意事项:
- -depth=0 作用于文件系统路径扫描层级,与 Go 包名(如 package main)无关;确保你在目标包所在目录下执行命令(例如 cd myapp && goconvey -depth=0);
- 该参数优先级高于配置文件(如 .convey 或 convey.json 中的 testArgs),若同时设置,命令行参数生效;
- 若需持久化配置,可在项目根目录创建 .convey 文件,写入:
{ "testArgs": ["-depth=0"] }此后直接运行 goconvey 即自动应用该限制;
- 注意:-depth 是 GoConvey 特有参数,不适用于原生 go test 命令,切勿与 go test -ldflags 等混淆。
总结:当你的项目包含多个可独立测试的包,而你只想聚焦于 main 包的集成测试或 CLI 行为验证时,goconvey -depth=0 是简洁、可靠且零侵入的解决方案——它无需修改代码、不依赖包名判断,仅通过路径约束实现精准控制。










