在 VSCode + Go 中,有没有办法运行“运行测试”/“调试测试”的自定义脚本?

问题描述 投票:0回答:2

我目前正在将一个项目从 Python 移植到 Go。我有一些测试代码需要一些外部脚本进行初始化(即它需要访问存储在 1Password 中的密码,我需要确保 docker postgres 映像已设置等)。我可以更改一些内容,但大部分项目都受到现有基础设施的限制。

在 VSCode 中,我希望能够单击“运行测试”/“调试测试”来运行测试。

  1. 有什么方法可以让“运行测试”/“调试测试”来运行自定义脚本而不是
    go build
  2. 或者,有什么方法可以说服
    go build
    在我运行测试时运行自定义脚本吗?
go visual-studio-code
2个回答
0
投票
  1. 我希望您指的是 VSCode 在每次测试之前插入的这些“运行测试”按钮。不,没有办法改变命令,但是有办法改变它的参数和环境。查看 settings.json 的这些参数:
    "go.testEnvVars": {
        "MY_VAR": "test"
    },
    "go.testTimeout": "2m",
    "go.testFlags": [
        "--count=1"
    ]
  1. 我不明白你的意图。一般来说,我们使用shell脚本来运行
    go
    ,而不是使用
    go
    来运行shell脚本。但想法却很少。
    首先,查看
    go generate
    命令 - 它运行源代码中定义的脚本。
    第二 -
    go run main.go
    当 main.go 包含
    exec.Command()

0
投票

一种可能性:

在你的 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(...)
函数,您需要对其执行此类设置操作。

© www.soinside.com 2019 - 2024. All rights reserved.