代码之家  ›  专栏  ›  技术社区  ›  Yoric

在VSCode+Go中,是否有任何方法可以运行“运行测试”/“调试测试”的自定义脚本?

  •  0
  • Yoric  · 技术社区  · 1 年前

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

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

    1. 是否有任何方法可以让“运行测试”/“调试测试”运行自定义脚本,而不是 go build ?
    2. 或者,有什么方法可以说服 去建造 在运行测试时运行自定义脚本?
    0 回复  |  直到 1 年前
        1
  •  0
  •   Alexus1024    1 年前
    1. 我希望,你指的是每次测试前插入VSCode的“运行测试”按钮。不,无法更改命令,但可以更改其参数和环境。查看settings.json的这些参数:
        "go.testEnvVars": {
            "MY_VAR": "test"
        },
        "go.testTimeout": "2m",
        "go.testFlags": [
            "--count=1"
        ]
    
    1. 我不明白你的意图。一般来说,我们使用shell脚本来运行 go ,但不是 运行shell脚本。但几乎没有什么想法。
      首先,看 go generate 命令-它运行源代码中定义的脚本。
      第二名- go run main.go 当main.go包含 exec.Command()
        2
  •  0
  •   LeGEC    9 月前

    一种可能性:

    在go测试文件中,您可以定义 TestMain(m *testing.M) { ... } 功能( link to 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(...) 您需要对每个包执行此类设置操作。