Python单测用“Run Test at Cursor”需文件被识别为test_.py或_test.py且光标在@test函数内;Go单测用“Test Current Function”要求光标在Test开头的函数中;通用方案是选中命令后执行workbench.action.terminal.runSelectedText。

Python 单测:用 Python: Run Test at Cursor 直接运行光标处测试方法
这个命令是 VSCode Python 扩展提供的原生命令,不需要额外插件,但必须满足两个前提:当前文件已被识别为测试文件(含 test_*.py 或 *_test.py 命名),且光标落在一个带 @test 装饰器的函数内部(如 def test_addition(self): 或 def test_add():)。
常见错误现象包括:Command 'Python: Run Test at Cursor' resulted in an error (command 'python.testing.runTestAtCursor' not found)——这说明 Python 扩展未激活,或当前文件没被识别为测试文件;光标停在类定义、空行或注释上也会静默失败。
- 确保已安装并启用
Python扩展(ms-python.python),且配置了正确解释器(python.defaultInterpreterPath) - 测试文件必须在
pytest或unittest支持的目录结构中(如tests/或项目根目录下) - 命令默认使用当前工作区配置的测试框架(
python.testing.pytestArgs或python.testing.unittestArgs),不支持跨框架混用 - 快捷键默认未绑定,需手动设置:打开
keybindings.json,添加{"key": "ctrl+alt+t", "command": "python.testing.runTestAtCursor", "when": "editorTextFocus && editorLangId == 'python'"}
Go 单测:用 Go: Test Current File 或 Go: Test Current Function
Go 插件(golang.go)提供更细粒度控制。光标在函数内时,Go: Test Current Function 会自动提取函数名并生成 go test -run ^TestFuncName$ 命令;若光标在文件任意位置,则 Go: Test Current File 运行整个文件的测试(即 go test -run ^Test.*$)。
注意:这些命令依赖 go 环境变量和模块初始化。如果报错 no Go files in directory,通常是因为当前打开的不是 _test.go 文件,或所在目录未执行过 go mod init。
- 确保
GOROOT和PATH中包含go可执行文件(终端里能直接运行go version) - 测试函数名必须以
Test开头,且接收*testing.T参数(func TestAdd(t *testing.T)) - 命令面板输入时建议补全到
Go: Test Current Function,避免误选Go: Test All Packages(后者会遍历整个 module) - 输出默认不显示
t.Log()内容,需在设置中为go.testFlags添加-v
通用方案:自定义快捷键绑定 workbench.action.terminal.runSelectedText
当语言扩展不提供原生单测快捷方式(比如 Rust、Ruby 或自定义测试框架),最可靠的方式是把测试命令写成可选中文本,再用终端执行。例如,在 Python 文件中写一行 pytest tests/test_math.py::test_add -v,选中它,按快捷键即可运行。
这个命令不依赖任何扩展,但要求你手动构造命令字符串。容易踩的坑是路径错误(相对路径基于终端当前工作目录,而非文件所在目录)、缺少环境变量(如虚拟环境未激活)、或 shell 类型不匹配(Windows 默认 PowerShell,可能拒绝执行未签名脚本)。
- 绑定快捷键示例:
{"key": "ctrl+shift+t", "command": "workbench.action.terminal.runSelectedText", "when": "editorTextFocus"} - 选中文本后,VSCode 会自动在集成终端中执行,但不会保存文件——务必先
Ctrl + S - 若终端未打开,该命令会自动创建新终端;若已有多个终端,它总在活动终端中执行
- 对 Windows 用户,建议在设置中将
terminal.integrated.defaultProfile.windows设为Command Prompt或Git Bash,避开 PowerShell 执行策略限制
为什么 Ctrl + F5 对单测基本无效
Ctrl + F5 绑定的是 Debug: Start Debugging,它只响应 launch.json 中配置的调试器,而绝大多数单测场景并不走调试流程。即使你写了 "type": "python" 配置,VSCode 也无法自动推断“此时要跑的是哪个测试函数”——它需要明确的 program 和 args,而不是动态上下文。
试图强行复用 launch.json 跑单测,往往导致:启动整个测试套件(而非单个用例)、无法传参(如 -k 过滤)、或因工作目录错误找不到测试模块。
- 不要为单测专门配
launch.json,除非你有稳定复用的复杂调试场景(如带覆盖率、特定环境变量) -
F5更适合调试主程序入口,Ctrl + F5在无配置时大概率报No configuration - 真正省时间的,是把高频命令(如
pytest -k test_add)做成代码片段(snippets),而非塞进调试配置
Python: Run Test at Cursor,Go 用 Go: Test Current Function,其他语言靠选中 + workbench.action.terminal.runSelectedText。所有这些都绕不开一个事实:VSCode 的单测快捷方式,本质是“命令 + 上下文判断”,不是“一键黑盒”。光标在哪、文件名是否合规、终端环境是否就绪——漏掉任何一个,都会卡在“点了没反应”。


















