我目前正在将一个项目从 Python 移植到 Go。我有一些测试代码需要一些外部脚本进行初始化(即它需要访问存储在 1Password 中的密码,我需要确保 docker postgres 映像已设置等)。我可以更改一些内容,但大部分项目都受到现有基础设施的限制。
在 VSCode 中,我希望能够单击“运行测试”/“调试测试”来运行测试。
go build
?go build
在我运行测试时运行自定义脚本吗? "go.testEnvVars": {
"MY_VAR": "test"
},
"go.testTimeout": "2m",
"go.testFlags": [
"--count=1"
]
go
,而不是使用go
来运行shell脚本。但想法却很少。 go generate
命令 - 它运行源代码中定义的脚本。 go run main.go
当 main.go 包含 exec.Command()
一种可能性:
在你的 go 测试文件中,你可以定义一个
TestMain(m *testing.M) { ... }
函数(链接到 doc),它可以在运行测试套件之前(或之后)执行任何代码:
// main_test.go:
package mypackage
import "testing"
func TestMain(m *testing.M) {
// setup code goes here
m.Run()
}
更详细的示例:go.dev/play
此代码将在您的包的任何
go test ...
运行中执行——而不仅仅是从 vscode 启动的操作。
这也适用于 gotest 标志的任意组合:
-run=...
、-count=...
(请注意,TestMain()
只会被调用一次,-count
在m.Run()
内部处理)
您需要为每个包定义一个
TestMain(...)
函数,您需要对其执行此类设置操作。