在Visual Studio Code中调试Go测试

huangapple go评论89阅读模式
英文:

Debugging Go tests in Visual Studio Code

问题

在我的Windows机器上,我安装了Visual Studio Code。要手动运行测试,我进入控制台到项目文件夹,并输入以下命令:

go test main_test.go

这个命令可以正常工作。

但是我有一个情况,我需要调试我的测试以了解发生了什么。

为此,我打开launch.json文件并添加了以下配置:

{
    "name": "Tests",
    "type": "go",
    "request": "launch",
    "mode": "test",
    "remotePath": "",
    "port": 2346,
    "host": "127.0.0.1",
    "program": "${workspaceRoot}",
    "env": {},
    "args": [
        "main_test.go"
    ],
    "showLog": true
}

按下F5后,我得到以下输出:

2017/03/29 13:28:11 server.go:73: Using API v1
2017/03/29 13:28:11 debugger.go:68: launching process with args: [./debug.test main_test.go main_go]
not an executable file
Process exiting with code: 1

你有任何想法为什么会出现这个错误,以及它正在寻找哪个可执行文件?

英文:

On my Windows machine, I have Visual Studio Code installed. To run tests manually, I go in console to projects folder and enter

go test main_test.go

It works perfectly.

在Visual Studio Code中调试Go测试

But I have a situation in which I need to debug my test to understand what's going on.

For this I open launch.json and add a configuration

  {
        "name": "Tests",
        "type": "go",
        "request": "launch",
        "mode": "test",
        "remotePath": "",
        "port": 2346,
        "host": "127.0.0.1",
        "program": "${workspaceRoot}",
        "env": {},
        "args": [
           "main_test.go"
            ],
        "showLog": true
    }

After I press F5 I have

2017/03/29 13:28:11 server.go:73: Using API v1
2017/03/29 13:28:11 debugger.go:68: launching process with args: [./debug.test main_test.go main_go]
not an executable file
Process exiting with code: 1

Any ideas why this error occurs and what executable it's looking for?

答案1

得分: 56

为了启动测试的调试器,我在launch.json中添加了一个额外的配置。

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Code",
            "type": "go",
            "request": "launch",
            "mode": "debug",
            "remotePath": "",
            "port": 2345,
            "host": "127.0.0.1",
            "program": "${workspaceRoot}",
            "env": {},
            "args": [],
            "showLog": true
        },
        {
            "name": "Test Current File",
            "type": "go",
            "request": "launch",
            "mode": "test",
            "remotePath": "",
            "port": 2345,
            "host": "127.0.0.1",
            "program": "${file}",
            "env": {},
            "args": [],
            "showLog": true
        }       
    ]
}

此外,这个配置不支持标签。测试文件中的所有标签都必须被禁用。

// +build unit
...
英文:

To launch debugger for test I added one more configuration for launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Code",
            "type": "go",
            "request": "launch",
            "mode": "debug",
            "remotePath": "",
            "port": 2345,
            "host": "127.0.0.1",
            "program": "${workspaceRoot}",
            "env": {},
            "args": [],
            "showLog": true
        },
        {
            "name": "Test Current File",
            "type": "go",
            "request": "launch",
            "mode": "test",
            "remotePath": "",
            "port": 2345,
            "host": "127.0.0.1",
            "program": "${file}",
            "env": {},
            "args": [],
            "showLog": true
        }       
    ]
}

Also this configuration does not support tags. All tags in test files have to be disabled

// +build unit
...

答案2

得分: 4

对于模式,您可以选择auto,它会根据活动的编辑器窗口选择debugtest

模式的所有选项包括autodebugtestexecreplaycore

生成的launch.json将如下所示:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch file",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "${file}"
        }
    ]
}
英文:

For the mode, you can select auto which would choose either debug or test depending on active editor window.

All options for mode are auto, debug, test, exec, replay, core.

The resulting launch.json would look like:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch file",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "${file}"
        }
    ]
}

答案3

得分: 1

在我的情况下,它没有工作是因为我将文件命名为main_tests.go而不是main_test.go。

英文:

In my case it was not working because I named my file main_tests.go instead of main_test.go

huangapple
  • 本文由 发表于 2017年3月29日 19:35:59
  • 转载请务必保留本文链接:https://go.coder-hub.com/43092364.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定