Vitalii
Vitalii

Reputation: 11071

Debugging Go tests in Visual Studio Code

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.

enter image description here

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?

Upvotes: 42

Views: 57424

Answers (3)

Tono Nam
Tono Nam

Reputation: 36048

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

Upvotes: 1

Saeed
Saeed

Reputation: 600

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}"
        }
    ]
}

Upvotes: 6

Vitalii
Vitalii

Reputation: 11071

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
...

Upvotes: 64

Related Questions